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

古城微笑少年丶 2023-03-13 03:51 240阅读 0赞

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

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

报错:

Exception in thread “main” java.util.regex.PatternSyntaxException: Dangling meta character ‘+’ near index 0
+

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzM3NzY4ODQz_size_16_color_FFFFFF_t_70

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点。

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

输入描述:

  1. 1d6+1d70+1d10+6

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

输出描述:

  1. 50.5

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

AC代码

  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. public class Main {
  4. static double res=0;
  5. public static void main(String[] args) throws Exception {
  6. BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  7. String[] str=reader.readLine().split("\\+");
  8. for(int i=0;i<str.length;i++) {
  9. if(str[i].indexOf('d')!=-1) {
  10. String[] tp=str[i].split("d");
  11. int n=Integer.parseInt(tp[0]);
  12. int x=Integer.parseInt(tp[1]);
  13. res+=(n*(1+x)*1.0/2);
  14. }else {
  15. res+=Integer.parseInt(str[i]);
  16. }
  17. }
  18. if((int)res==res) System.out.println(res);
  19. else System.out.printf("%.1f",res);
  20. }
  21. }

发表评论

表情:
评论列表 (有 0 条评论,240人围观)

还没有评论,来说两句吧...

相关阅读