2013-04-08 88 views
-1

这里是我的代码:Java的ArrayList的字符串分离

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

我试图分裂字符串s到这样的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 

我在做什么错了?

+0

您确定要使用开关吗? – Aboutblank 2013-04-08 15:32:39

回答

4

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

您将需要开发更一般的解析逻辑。在网上搜索“parse equation java”以获得大量关于如何执行此操作的示例。如果您只是想要评估方程式的能力,请参阅this threadthis one

4

nsi = Integer.parseInt(ns);throw

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

调试你的代码,你会看到ns包含一个可分析的整数。 (提示:它是空的)

提示:本stack trace是非常丰富的,你可以很容易地知道问题发生的位置和为什么没有它发生。一个简单的调查会导致你的问题。在这种情况下,它是从parseInt(Class Integer)抛出的异常,您可以在其中看到该方法的很好的文档。这将帮助您了解您的问题。