java - 使用正则表达式运行计算器程序时出现 NumberFormatException

标签 java regex numberformatexception

我正在尝试编写一个简单的计算器。

public static String cal(){
        String a="-60-1+40";
        if(a.matches("-?[1-9][0-9]?([\\+-][1-9][0-9]?)+")){
            System.out.println(a);
            String operators[]=a.split("[0-9]+");
            String operands[]=a.split("[+-]");
            int agregate = Integer.parseInt(operands[0]);
            for(int i=1;i<operands.length;i++){
                if(operators[i].equals("+"))
                    agregate += Integer.parseInt(operands[i]);
                else 
                    agregate -= Integer.parseInt(operands[i]);
            }
             return Integer.toString(agregate);
        }else throw new invalidExpressionException(a+" is a Invalid expression");
    }

我有这个函数,但是当我尝试运行它时,如果字符串的第一个字符是 "-",我会得到一个 NumberFormatException。所有其他情况似乎都是正确的,只有那个失败了。我已经尝试修复了一段时间,但找不到解决方法。

run:
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
-60-1+40
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:592)
    at java.lang.Integer.parseInt(Integer.java:615)
    at calculator.Calculator.cal(Calculator.java:20)
    at calculator.Calculator.main(Calculator.java:9)

最佳答案

按照@Ben 的评论,解决方法是检查第一个字符是否为“-”,在这种情况下,在处理之前将0 附加到字符串它(-n 可以从 0 减去数字 n 得到):

-1+2-3,应该变成0-1+2-3

if(a.startsWith("-")){
    a = "0" + a;
}

关于java - 使用正则表达式运行计算器程序时出现 NumberFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50949168/

相关文章:

java - 带有简单加密的 NumberFormatException

java - 用于 groovy 测试的 Maven 插件

java - Spring MVC 拦截器不排除提供的 URL

java - 使用抽象方法进行常规模拟

regex - 如何在logstash中使用mutate和gsub替换value的部分

java - Java中如何提取一个字符串中的所有整数并转换为指定的char值?

java - 是否可以将不可变列表作为 Java 中不可变映射内的值字段?

Python pandas 从带有短语的单元格中提取连字符的单词

php - 计算 php 中正则表达式模式的单词数?

将 1000000000000001 转换为基数 5 时出现 Java NumberFormatException