我希望将一串单个数字整数转换为Integer
ArrayList,我得到了一个非常奇怪的异常。这是示例代码:
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);
}
它基本上应该从stdin中读取int的字符串,将它们作为基元放在arraylist中,然后将它们打印出来。当然,这只是一个小测试案例,我缩小了我的较大错误。
这引发的例外情况如下:
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)
据我所知,应该发生以下情况:
line
接受stdin temp
填充每个单个数字值(每个字符后分割(“”)拆分)String
)都会被解析为int
并添加到artemp
这到底出了什么问题?如果我使用以下代码打印出temp
:
for(String s : temp) System.out.println(s);
然后成功打印数字(作为字符串),我没有多余的字符。 parseInt(temp[i])
如何将""
应用于字符串{{1}}?
答案 0 :(得分: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]));
}
答案 1 :(得分:0)
来自文档parseInt
Throws:
NumberFormatException - if the string does not contain a parsable integer.
所以你的代码artemp.add(Integer.parseInt(temp[i]));
是一个包含不可解析字符串的地方。
答案 2 :(得分:0)
你的分裂(“”)为空,你应该写分割(“”)(带空格的双引号)
答案 3 :(得分:0)
而不是使用split,我认为使用字符串本身会更好。 试试这个。
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);
}