首页 文章

Java ArrayList字符串分离

提问于
浏览
-1

这是我的代码:

import java.util.ArrayList;

public class SplitString 
{
    public static void main(String[] args) 
    {
        String s = "80+5+3*(11%(3*2)-(5+1)+6)-(10+10)+(2*2)*5";
        ArrayList<String> equation = new ArrayList<>();
        String ns = "";
        String b;
        int nsi;

        for(int c=0; c<s.length(); c++)
        {
             b = s.substring(c,c+1);
            switch (b) {
                case "0":
                case "1":
                case "2":
                case "3":
                case "4":
                case "5":
                case "6":
                case "7":
                case "8":
                case "9":
                    ns += b;
                    break;
                case "+":
                case "-":
                case "*":
                case "/":
                case "%":
                case "(":
                case ")":
                    nsi = Integer.parseInt(ns);
                    equation.add(Integer.toString(nsi));
                    equation.add(b);
                    ns = "";
                    break;
            }

             for(int i=0; i<equation.size(); i++)
             {
                 System.out.print(equation.get(i));
             }
        }
    }
}

我试图将字符串分成单独的数字和 ArrayList 中的运算符,这样如果输入了像 00080 这样的数字,它将把数字假设为 80 . 但是我遇到了麻烦,当我运行它时它给了我:

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
80+80+80+5+80+5+80+5+3*
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:504)
    at java.lang.Integer.parseInt(Integer.java:527)
    at stringequationfull.StringEquationFull.main(StringEquationFull.java:42)
Java Result: 1

我究竟做错了什么?

2 回答

  • 4

    您正在尝试将空字符串解析为int;因此例外 . 你处理运营商的逻辑是错误的 . 您的代码假设操作符之间总是有一个数字,但如果您查看等式,显然不是这种情况 . (查看括号的出现 . )引发异常是因为,如消息所示, ns 是空字符串 .

    您将需要开发更通用的解析逻辑 . 在网上搜索"parse equation java",了解有关如何执行此操作的大量示例 . 如果您只想要评估方程式,请查看this threadthis one .

  • 4

    nsi = Integer.parseInt(ns);throw

    NumberFormatException - 如果字符串不包含可解析的整数 .

    调试你的代码,你会看到 ns doesn't 包含一个可解析的整数 . (提示:它是空的)

    提示:stack trace信息非常丰富,您可以轻松了解问题发生的位置以及问题发生的原因 . 一个简单的调查将引导您解决问题 . 在这种情况下,它是从parseInt(Class Integer)抛出的异常,您可以看到该方法的良好文档 . 这将帮助您找到问题所在 .

相关问题