1

だから、これが問題です、私はこのコードを持っています:

public static void main(String[] args) {
    try {
        FileInputStream fstream = new FileInputStream("test.txt");
        // Use DataInputStream to read binary NOT text.
        BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
        String strLine = br.readLine();
        String[] split = strLine.split(" ");

        System.out.println(Integer.parseInt(split[0]));
        in.close();
    }
    catch (Exception e) {//Catch exception if any
        System.err.println("Error: " + e);
    }
}

「66」だけのtest.txtという名前のファイルがあるとします。したがって、最初の行を読み取り、その行を2つの文字列に分割します。問題は、split [1]にInteger.parseIntを使用できることですが、split[0]System.out.println(split[0])6」を出力)にそのメソッドを使用できないため、次のエラーが出力されます。

Error: java.lang.NumberFormatException: For input string: "6"

更新:.javaファイルをjavacを使用してターミナルでコンパイルすると、例外が発生しないため、Eclipseの問題が発生する可能性があります!:))

UPDATE2:解決しました。ケイトと一緒に保存しているときに問題が発生しました。何がわからないが、geditの方がうまくいく:Dありがとうございます。

4

4 に答える 4

0

ファイルの先頭にあるこの問題は、通常BOMが原因であり、一部のソフトウェア (実際には主にメモ帳) が Unicode ファイルの先頭に配置することを好みます。

適切なテキスト エディターでファイルを開き、BOM なしでファイルを保存するように構成します。

ファイルを変更できない場合は、最初の文字を読み飛ばしてください。

于 2013-02-28T18:36:23.780 に答える
0

偽の/予期しない文字を除外するために、次のことを試してみます。

.. setup/read code in main method...
String[] split = strLine.split(" ");
for (String s : split) {
      System.out.println(String.format("[%s] => integer? %b", s, isInteger(s)));
}
... the rest of the main method....


private static boolean isInteger(String n) {
    try {
        Integer.parseInt(n);
    } catch(NumberFormatException e) {
        return false;
    }
    return true;
}

角かっこの間に数字ではないものがある場合、または整数はどこにありますか? false を返しますが、これが問題である可能性があります

于 2013-02-28T18:37:02.117 に答える
0

読み取っているファイルの実際のエンコーディングを判別できる場合は、それを明示的に設定して、余分なバイトが正しく文字に変換されるようにすることができます。

new InputStreamReader(new FileInputStream(...), <encoding>)

于 2013-02-28T18:51:03.143 に答える
0

試してみてください: hexdump -C test.txt Linux を使用している場合は、印刷できない文字が表示されます。

また、トリム()の答えは問題ありません。

于 2013-02-28T18:31:35.517 に答える