1 桁の整数の文字列を ArrayList に変換したかったのInteger
ですが、非常に奇妙な例外が発生しました。サンプルコードは次のとおりです。
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 の文字列を読み取り、プリミティブとして配列リストに入れ、出力することになっています。もちろん、これは大きなエラーを絞り込んだ小さなテスト ケースにすぎません。
これにより発生する例外は次のとおりです。
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
個々の 1 桁の値が入力されます (split("") は各文字の後に分割されます)。- 各数字 ( として格納
String
) は として解析され、int
に追加されます。artemp
- 各桁を印刷します。
ここで何がうまくいかないのですか?temp
次のコードで印刷すると:
for(String s : temp) System.out.println(s);
その後、数字は (文字列として) 正常に出力され、余分な文字はありません。どのくらい正確parseInt(temp[i])
に文字列に適用できます""
か?