File fil = new File("Tall.txt");
FileReader inputFil = new FileReader(fil);
BufferedReader in = new BufferedReader(inputFil);
int [] tall = new int [100];
String s =in.readLine();
while(s!=null)
{
int i = 0;
tall[i] = Integer.parseInt(s); //this is line 19
System.out.println(tall[i]);
s = in.readLine();
}
in.close();
ファイル「Tall.txt」を使用して、それらに含まれる整数を「tall」という名前の配列に書き込もうとしています。これはある程度実行されますが、実行すると次の例外がスローされます(:
Exception in thread "main" Java.lang.NumberFormatException: For input string: ""
at Java.lang.NumberFormatException.forInputString(Unknown Source)
at Java.lang.Integer.parseInt(Unknown Source)
at Java.lang.Integer.parseInt(Unknown Source)
at BinarySok.main(BinarySok.Java:19)
なぜ正確にこれを行うのですか、どのように削除しますか?ご覧のとおり、ファイルを文字列として読み取り、intに変換しますが、これは違法ではありません。
このようなことをしたいかもしれません(Java 5&up)にいる場合)
Scanner scanner = new Scanner(new File("tall.txt"));
int [] tall = new int [100];
int i = 0;
while(scanner.hasNextInt()){
tall[i++] = scanner.nextInt();
}
ファイルには空の行が必要です。
「try」ブロックでparseInt呼び出しをラップすることができます。
try {
tall[i++] = Integer.parseInt(s);
}
catch (NumberFormatException ex) {
continue;
}
または、解析する前に空の文字列を確認するだけです。
if (s.length() == 0)
continue;
ループ内でインデックス変数i
を初期化すると、常に0になります。while
ループの前に宣言を移動する必要があります。 (または、for
ループの一部にします。)
比較のために、ファイルを読み取る別の方法を次に示します。ファイルに整数がいくつあるかを知る必要がないという利点があります。
File file = new File("Tall.txt");
byte[] bytes = new byte[(int) file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(bytes);
fis.close();
String[] valueStr = new String(bytes).trim().split("\\s+");
int[] tall = new int[valueStr.length];
for (int i = 0; i < valueStr.length; i++)
tall[i] = Integer.parseInt(valueStr[i]);
System.out.println(Arrays.asList(tall));
Javaは空の文字列を数値に変換しようとしています。一連の数値の最後に空の行がありますか?
おそらくこのようなコードを修正できます
String s = in.readLine();
int i = 0;
while (s != null) {
// Skip empty lines.
s = s.trim();
if (s.length() == 0) {
continue;
}
tall[i] = Integer.parseInt(s); // This is line 19.
System.out.println(tall[i]);
s = in.readLine();
i++;
}
in.close();
異なる行末で混乱する可能性があります。 Windowsファイルは、キャリッジリターンとラインフィードで各行を終了します。 Unix上の一部のプログラムは、キャリッジリターンを行の終わりと見なし、改行を別の行の終わりと見なすため、各行の間に余分な空白行があるかのようにそのファイルを読み取ります。
File file = new File("E:/Responsibility.txt");
Scanner scanner = new Scanner(file);
List<Integer> integers = new ArrayList<>();
while (scanner.hasNext()) {
if (scanner.hasNextInt()) {
integers.add(scanner.nextInt());
} else {
scanner.next();
}
}
System.out.println(integers);