1

我希望将一串个位数整数转换为IntegerArrayList,但遇到了一个非常奇怪的异常。这是示例代码:

    Scanner test = new Scanner(System.in);
    String[] temp = null;
    String line = null;
    ArrayList<Integer> artemp = new ArrayList<>();

    while(test.hasNext()) {
        line = test.next();
        temp = line.split("");
        for(int i = 0; i < temp.length; i++)
        artemp.add(Integer.parseInt(temp[i]));
        for(int i : artemp) System.out.println(i);

    }

它基本上应该从标准输入读取整数字符串,将它们作为原语放入数组列表中,然后将它们打印出来。当然,这只是我缩小较大错误范围的一个小测试用例。

这引发的异常如下:

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:504)
    at java.lang.Integer.parseInt(Integer.java:527)

据我所知,应该发生以下情况:

  1. line接受标准输入
  2. temp填充每个单独的个位数值(split("") 在每个字符后拆分)
  3. 每个数字(存储为 a String)被解析为 anint并添加到artemp
  4. 打印出每个数字。

这里到底出了什么问题?temp如果我使用以下代码打印出来:

for(String s : temp) System.out.println(s);

然后数字被成功打印(作为字符串),我没有多余的字符。究竟如何才能parseInt(temp[i])应用于字符串""

4

4 回答 4

0

你的 split("") 是 null ,你应该写 split(" ") (带空格的双引号)

于 2013-09-23T06:07:40.113 回答
0

我认为使用字符串本身会更好,而不是使用拆分。尝试这个。

Scanner test = new Scanner(System.in);
String[] temp = null;
String line = null;
ArrayList<Integer> artemp = new ArrayList<>();

while(test.hasNext()) {
    line = test.next();
    for(int i = 0; i < line.length; i++)
        artemp.add(Integer.parseInt(""+line.charAt(i));
    for(int i : artemp) System.out.println(i);
}
于 2013-09-23T06:08:53.910 回答
0

首先我怀疑你的分裂,

  temp = line.split("");

如果你想用空间分割,它应该是

  temp = line.split(" ");

如果你""只想要,那么这就是原因。

与转换无关。

你里面有一些空字符串array

所以将空字符串转换为整数时出现异常。

这里

 artemp.add(Integer.parseInt(temp[i]));

您可以做的是,在解析之前检查数据。

if(temp[i]!=null && !temp[i].isEmpty()){
          artemp.add(Integer.parseInt(temp[i]));
}
于 2013-09-23T05:45:15.557 回答
0

来自文档parseInt

Throws:
    NumberFormatException - if the string does not contain a parsable integer.

所以你的代码artemp.add(Integer.parseInt(temp[i]));是一些无法解析的字符串。

于 2013-09-23T05:49:08.297 回答