[英]What's wrong with this group method? (split String)
有人可以通过此递归功能帮助我:
输入一个字符串=“ 5.5 + 33 + 22”;
正则表达式将第一个数字+运算符=“ 5.5 + 33”分割并计算总和或减法。 对结果值+仍要处理的字符串部分调用递归调用:“ 38.5 + 22”
我收到了这个错误:我猜group方法出了点问题,但是我没有解决
致命异常:主进程:com.example.marco.calcol,PID:9798 java.lang.ArrayIndexOutOfBoundsException:length = 2; index = 2在java.util.regex.Matcher.group(Matcher.java:370)在com.example.marco.calcol.MainActivity.compute(MainActivity.java:138)在com.example.marco.calcol.MainActivity $ 14 .onClick(MainActivity.java:107)........
public void compute(String displ) {
Pattern p = Pattern.compile("^\\d+(?:\\.\\d+)?[+-]\\d+(?:\\.\\d+)?");
Matcher m = p.matcher(displ);
if (m.find()) {
String s = m.group(1); // CRASH HERE row(MainActivity.java:138)
if (s.indexOf('+') >= 0) {
int index = s.indexOf('+');
Double a = Double.parseDouble(s.substring(0, index - 1));
Double b = Double.parseDouble(s.substring(index + 1, s.length()));
this.sum = this.sum + a + b;
}
if (s.indexOf('-') > 0) {
int index = s.indexOf('-');
Double a = Double.parseDouble(s.substring(0, index - 1));
Double b = Double.parseDouble(s.substring(index + 1, s.length()));
this.sum = this.sum + a - b;
}
displ.substring(s.length());
compute(Double.toString(sum).concat(displ));
}
}
正则表达式中没有捕获组,因此group(1)
无效。 如果需要整个匹配,请使用group()
或group(0)
。
public void compute(String displ) {
Pattern p = Pattern.compile("(\\d+(?:\\.\\d+)?)([+-])(\\d+(?:\\.\\d+)?)");
for (;;) {
Matcher m = p.matcher(displ);
if (!m.find()) {
break;
}
double lhs = Double.parseDouble(m.group(1));
String op = m.group(2);
double rhs = Double.parseDouble(m.group(3));
double result = 0;
switch (op) {
case "+":
result = lhs + rhs;
break;
case "-":
result = lhs - rhs;
break;
}
displ = displ.substring(0, m.start())
+ result
+ displ.substring(m.end());
}
System.out.println(displ);
}
(?: ... )
是一个非捕获组,不算作m.group(i)
。 使用普通组(...)
您可以立即提取识别出的元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.