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、因为+、*、|、\等符号在正则表达示中有相应的不同意义,所以在使用时要进行转义处理。
刷题时遇到该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);
}
}
还没有评论,来说两句吧...