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