Java 制作一个字符串行计算器

Java 制作一个字符串行计算器,java,regex,calculator,Java,Regex,Calculator,现在我正在做一个字符串计算器,学习正则表达式,我有一些问题 对于像:2+2这样的2个数字,输出将是4,但如果我尝试输入3个数字:2+2+2,输出将是4,忽略第三个数字,但我将通过operans.length 另一个,如果我尝试将第一个数字设置为负数,如:-2+2,它将给我一个错误:线程“main”中的异常java.lang.NumberFormatException:对于输入字符串:“” String[]operators=input.split(“\s*-?\w+\s*”);真的不管用,但为什

现在我正在做一个字符串计算器,学习正则表达式,我有一些问题

对于像:2+2这样的2个数字,输出将是4,但如果我尝试输入3个数字:2+2+2,输出将是4,忽略第三个数字,但我将通过operans.length

另一个,如果我尝试将第一个数字设置为负数,如:-2+2,它将给我一个错误:线程“main”中的异常java.lang.NumberFormatException:对于输入字符串:“”

String[]operators=input.split(“\s*-?\w+\s*”);真的不管用,但为什么

   Scanner scanner = new Scanner(System.in);

        while (true) {
            String input = scanner.nextLine();

            boolean ifExit = false;
            boolean ifHelp = false;
            boolean ifEmpty = false;
            boolean ifOneNumber = false;

            String[] operators = input.split("\\s*\\w+\\s*");
            String[] operands = input.split("\\s*[+-]+\\s*");

            int result = 0;

            if (operands[0].matches("/exit")) {
                ifExit = true;
                System.out.println("Bye!");
                break;
            } else if (operands[0].matches("/help")) {
                ifHelp = true;
                System.out.println("The program calculates the sum of numbers");
            } else if (operands[0].matches("")) {
                ifEmpty = true;
            } else if (operands[0].matches("[0-9]+") && operands.length == 1) {
                ifOneNumber = true;
                result += Integer.parseInt(operands[0]);
                System.out.println(result);
            }

            for (int i = 1; i < operands.length; i++) {
                result = Integer.parseInt(operands[0]);

                if (operators[i].matches("[+]")) {
                    allBooleansAreFalse(ifHelp, ifEmpty, ifOneNumber);
                    result += Integer.parseInt(operands[i]);
                } else if (operators[i].matches("[-]")){
                    allBooleansAreFalse(ifHelp, ifEmpty, ifOneNumber);
                    result -= Integer.parseInt(operands[i]);
                } else if (operators[i].matches("[+]{2,1000}")) {
                    allBooleansAreFalse(ifHelp, ifEmpty, ifOneNumber);
                    result += Integer.parseInt(operands[i]);
                } else if (operators[i].matches("[-]{2}")) {
                    allBooleansAreFalse(ifHelp, ifEmpty, ifOneNumber);
                    result += Integer.parseInt(operands[i]);
                } else if (operators[i].matches("[-]{3}")) {
                    allBooleansAreFalse(ifHelp, ifEmpty, ifOneNumber);
                    result -= Integer.parseInt(operands[i]);
                }
            }
            if (ifExit == true) {
                break;
            } else if (ifExit == false && ifHelp == false && ifEmpty == false && ifOneNumber == false) {
                System.out.println(result);
            }
        }

    }

    public static void allBooleansAreFalse(boolean ifHelp, boolean ifEmpty, boolean ifOneNumber) {
        ifHelp = false;
        ifEmpty = false;
        ifOneNumber = false;
    }
Scanner Scanner=新的扫描仪(System.in);
while(true){
字符串输入=scanner.nextLine();
布尔ifExit=false;
布尔ifHelp=false;
布尔ifEmpty=false;
布尔ifOneNumber=false;
字符串[]运算符=输入。拆分(\\s*\\w+\\s*”;
字符串[]操作数=输入。拆分(\\s*[+-]+\\s*”;
int结果=0;
if(操作数[0]。匹配(“/exit”)){
ifExit=true;
System.out.println(“再见!”);
打破
}else if(操作数[0]。匹配(“/help”)){
ifHelp=true;
System.out.println(“程序计算数字之和”);
}else if(操作数[0]。匹配(“”){
ifEmpty=true;
}else if(操作数[0]。匹配(“[0-9]+”)&&operans.length==1){
ifOneNumber=true;
结果+=整数.parseInt(操作数[0]);
系统输出打印项次(结果);
}
for(int i=1;i
我通过在for循环之前添加此代码修复了第一个问题:

else if (operands[0].matches("[0-9]")) {
                result = Integer.parseInt(operands[0]);
            }

result = Integer.parseInt(operands[0]);

并在for循环中删除此代码:

else if (operands[0].matches("[0-9]")) {
                result = Integer.parseInt(operands[0]);
            }

result = Integer.parseInt(operands[0]);


现在,我需要解决负数的问题,如果第一个数字是负数:-2+2,这会给我一个错误,有人吗?

你确定这有效吗?格式为
7+9
的字符串将生成两个操作数和一个运算符。但是您可以循环使用
运算符[i]
操作数[i]
i=1开始。因此,
操作数[1]
9
(正确`但要确定如何使用它,请查看
运算符[1]
这应该引发ArrayOutOfBoundsException。在循环操作数时,不断将
结果
重置为第一个操作数,以便忽略前面的加法。例如,2+3+4很可能产生6。