-1

Here is my code:

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));
             }
        }
    }
}

I'm trying to split the String s into separate numbers and operators within an ArrayList in such a way that if a number like 00080 is entered, it will assume the number as 80 instead. But I'm having trouble, and when I run this it gives me:

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

What am I doing wrong?

4

2 回答 2

4

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

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

于 2013-04-08T15:14:12.673 回答
4

nsi = Integer.parseInt(ns);抛出

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

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

提示堆栈跟踪信息量很大,您可以很容易地知道问题发生在哪里以及为什么发生。一个简单的调查将引导您解决问题。在这种情况下,它是从parseInt (Class Integer)抛出的异常,您可以在那里看到该方法的良好文档。这将极大地帮助您找出问题所在。

于 2013-04-08T15:15:50.730 回答