NumberFormatException: For input string: “” while parsing

若如初见. 提交于 2019-12-11 10:39:19

问题


I wished to turn a string of single digit integers into an Integer ArrayList, and I'm getting a very odd exception. Here's the sample code:

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

    }

It is basically supposed to read the string of ints from stdin, put them in an arraylist as primitives, and then print them out. Of course, this is just a small test case to which I narrowed down my larger error.

The exception this raises is the following:

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)

As far as I can see, the following should take place:

  1. line takes in stdin
  2. temp gets filled with each of the individual single-digit values (split("") splits after every character)
  3. Each digit (stored as a String) is parsed as an int and added to artemp
  4. Print out each digit.

What exactly is going wrong here? If I print out temp with the following code:

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

Then the digits get printed successfully (as Strings), and I there are no extra characters. How exactly could parseInt(temp[i]) be getting applied to the string ""?


回答1:


First of all I'm suspecting your split,

  temp = line.split("");

If you want to split with space ,it should be

  temp = line.split(" ");

And if you want with "" only,then here is the cause.

There is nothing to do with conversion.

There are some empty strings in you array.

So exception while converting empty string in to integer.

here

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

What you can do is,check the data before parsing.

if(temp[i]!=null && !temp[i].isEmpty()){
          artemp.add(Integer.parseInt(temp[i]));
}



回答2:


From The Docs parseInt

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

So your Code artemp.add(Integer.parseInt(temp[i])); is some where encoutering a unparsable String.




回答3:


your split("")is null ,you should write split(" ") (double quote with a space)




回答4:


Rather than using split, I'd think using the string itself will be better. Try this.

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


来源:https://stackoverflow.com/questions/18952433/numberformatexception-for-input-string-while-parsing

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!