Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';这种分组方法有什么问题?(拆分字符串)_Java_Android_Regex_String - Fatal编程技术网

Java 什么';这种分组方法有什么问题?(拆分字符串)

Java 什么';这种分组方法有什么问题?(拆分字符串),java,android,regex,string,Java,Android,Regex,String,有人可以帮助我使用这个递归函数: 输入字符串=“5.5+33+22” 正则表达式将第一个数字+运算符=“5.5+33”拆分,然后计算总和或减法。对结果值+仍要处理的字符串部分调用递归调用:“38.5+22” 我得到了这个错误: 我猜分组法有问题,但我没有设法解决它 致命异常:主 进程:com.example.marco.calcol,PID:9798 java.lang.ArrayIndexOutOfBoundsException:长度=2;指数=2 位于java.util.regex.Matc

有人可以帮助我使用这个递归函数:

输入字符串=“5.5+33+22”

正则表达式将第一个数字+运算符=“5.5+33”拆分,然后计算总和或减法。对结果值+仍要处理的字符串部分调用递归调用:“38.5+22”

我得到了这个错误: 我猜分组法有问题,但我没有设法解决它

致命异常:主 进程:com.example.marco.calcol,PID:9798 java.lang.ArrayIndexOutOfBoundsException:长度=2;指数=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)


您的正则表达式中没有捕获组,因此
group(1)
无效。如果需要整个匹配,请使用
group()
group(0)

(?:…)
是非捕获组,不算作
m.group(i)

使用普通组
(…)
可以立即提取已识别的元素。

好的,我理解,谢谢,只是一个小错误:第二个双精度应该是“m.group(3)”。附言:现在我不能代表你了,我还不到15点
 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));
    }

}
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);
}