Java ArrayList字符串分离

时间:2013-04-08 15:09:07

标签: java string arraylist integer substring

这是我的代码:

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这样的数字,它将假定数字为{{1相反。但是我遇到了麻烦,当我运行它时它给了我:

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 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:4)

nsi = Integer.parseInt(ns);throw

  

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

调试代码,您会发现ns 包含可解析的整数。 (提示:它是空的)

提示 stack trace 信息丰富,您可以轻松了解 发生问题的位置为什么< / em>它发生了吗。一个简单的调查将引导您解决问题。在这种情况下,它是从 parseInt (类整数)引发的异常,您可以看到该方法的良好文档。这将帮助您找到解决问题的方法。