2013-04-08 2 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

ответ

4

Вы пытаетесь разобрать пустую строку как int; следовательно, исключение. Ваша логика для работы с операторами неверна. Ваш код предполагает, что между операторами всегда есть число, но если вы посмотрите на свое уравнение, это явно не так. (Посмотрите на вхождения круглых скобок.) Исключение возникает потому, что, как говорится в сообщении, ns является пустой строкой.

Вам понадобится разработать более общую логику синтаксического анализа. Найдите в Интернете «parse equation java» для многих примеров того, как это сделать. Если вы просто хотите оценить уравнения, взгляните на this thread или this one.

4

nsi = Integer.parseInt(ns); будет throw:

NumberFormatException - , если строка не содержит оформленной целое.

отладка коды, и вы увидите, что nsне содержат оформленное целое. (Подсказка: он пуст)

Совет: stack trace очень информативен, вы можете легко узнать, где произошла проблема и почему оно произошло. Простое исследование приведет вас к проблеме. В этом случае это исключение, которое было выбрано из parseInt (Class Integer), вы можете увидеть там хорошую документацию метода. Это поможет вам много узнать, в чем ваша проблема.

Смежные вопросы