Dangling meta character '+' near index 0 + 报错 解决方法

1、split方法转化字符串为数组:

     String[] str=reader.readLine().split("+");

     报错:

 Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
+

    

 

2、经调试跟踪发现字符串中带有“*”时,用“*”分隔字符串成数组是不正确的,正确的写法是:

     String[] str=reader.readLine().split("\\+");

     修改后,运行正常。

 

3、因为+、*、|、\等符号在正则表达示中有相应的不同意义,所以在使用时要进行转义处理。

     这里同样可以用

     String[] strPicArr = map.get("hw_pic").toString().split("[*]");

 

刷题时遇到该bug


链接:https://ac.nowcoder.com/acm/contest/5477/B
来源:牛客网
 

勇士菜哭武获得了一把新的武器,武器有特殊的伤害计算方式。武器的伤害计算方式由若干个部分的和组成,用+号连接。每一部分可以是一个整数a,或者是一个公式ndx。其中a表示固定伤害a点;ndx表示掷n个x面骰子,伤害是所有骰子点数的和。总伤害是每一部分伤害的和。

比如2d6+1d70+3,表示掷两个6面骰子和一个70面骰子(不一定实际存在70面骰子,可以理解成1到70当中随机选择一个整数),再加上固定伤害3点。

他正准备挑选一把好武器,需要计算新武器的伤害期望值,想让你帮他计算一下。

输入描述:

 1d6+1d70+1d10+6

输入一个字符串,表示伤害计算公式。字符串长度不超过5000,对于每一个部分,1≤a, n, x≤1000。a,n,x都是整数。 

输出描述:

 50.5

输出一个数,表示伤害的期望值。如果不是整数,小数点后位数保留最少,即最终结果只有可能是整数或者小数点后是.5的形式,如果不是整数,那么保留一位小数。

 

AC代码

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
	static double res=0;
	public static void main(String[] args) throws Exception {
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		String[] str=reader.readLine().split("\\+");
		for(int i=0;i<str.length;i++) {
			if(str[i].indexOf('d')!=-1) {
				String[] tp=str[i].split("d");
				int n=Integer.parseInt(tp[0]);
				int x=Integer.parseInt(tp[1]);
				res+=(n*(1+x)*1.0/2);
			}else {
				res+=Integer.parseInt(str[i]);
			}
		}
		if((int)res==res) System.out.println(res);
		else System.out.printf("%.1f",res);
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章