3

私は本から簡単な演習を行っていますが、Java 関数 parseInt がどのように機能するかについて少し混乱しています。入力ファイルから行を読み取り、StringTokenizer を使用してそれを分割し、各部分を整数として解析したいと考えています。

ウォッチ ウィンドウで、parseInt 関数の入力が実際に有効な整数 ("35" など) と思われる文字列であることを確認しました。ただし、値「35」を保持するstr.charAt変数で関数を使用しようとすると、奇妙な結果が得られます。str

str.charAt(0) == ""
str.charAt(1) == "3"
str.charAt(2) == ""
str.charAt(3) == "5"

これはおそらくエンコーディングに何らかの形で関連する問題であるように思われるので、ファイルを読み取るこの方法を使用して修正しようとしました:

InputStreamReader reader = new InputStreamReader(new FileInputStream(inputfile), "UTF-8");

(エディターで UTF-8 エンコーディングを使用してファイルを明示的に保存しました) が、これは役に立ちませんでした。何が問題なのか、それを修正する方法はありますか?

編集:私のサンプル

        InputStreamReader reader = new InputStreamReader(new FileInputStream(inputfile), "UTF-8");
        BufferedReader bfreader = new BufferedReader(reader);

        line = bfreader.readLine();
        while (line !=null)
        {
                String[] valueStrings = line.split(" ");
                String hole = valueStrings[0]; 

                int[] values = new int[4];
                for (int i = 0; i <values.length; i++){

                    String nr = valueStrings[i+1].trim(); 
                    values [i] = Integer.parseInt(nr);
                }

                // it breaks at the parseInt here, the rest is not even executed...

         }
4

1 に答える 1

11

私の推測では、実際には次のようになります。

str.charAt(0) == '\0'
str.charAt(1) == '3'
str.charAt(2) == '\0'
str.charAt(3) == '5'

おそらく実際にはUTF-8ではなくUTF-16で保存されているようですが、テキストエディタが「null」文字を保存することを意図していると考えた場合、それは理にかなっています. バイナリ 16 進エディタでテキスト ファイルを調べてみてください。1 バイトおきに 0 になっていることがわかると思います。

それでも問題が解決しない場合は、問題を示す短いが完全なプログラムを投稿してください。これまでのところ、コードは 1 行しか表示されていません。

于 2010-02-12T20:40:16.450 に答える