繁体   English   中英

Java ArrayList字符串分隔

[英]Java ArrayList String Separation

这是我的代码:

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

我试图将String拆分成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

我究竟做错了什么?

您正在尝试将空字符串解析为int; 因此例外。 您与操作员打交道的逻辑是错误的。 您的代码假定运算符之间始终有一个数字,但是如果您查看方程式,显然不是这样。 (请注意是否出现了括号。)正在引发异常,因为如消息所述, ns是空字符串。

您将需要开发更通用的解析逻辑。 在网上搜索“ parse equation java”,以获取有关如何执行此操作的许多示例。 如果您只想求等式的能力,请看一下这个线程这个 线程

nsi = Integer.parseInt(ns); 抛出

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

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

提示堆栈跟踪非常有用,您可以轻松知道问题发生在哪里以及为什么发生。 一个简单的调查将带您找到问题所在。 在这种情况下,这是从parseInt (类Integer)引发的异常,您可以在此看到该方法的良好文档。 这将极大地帮助您找出问题所在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM