7

私はいくつかの非常に基本的なコードを持っています

while (scan.hasNextLine())
{
    String temp = scan.nextLine();
    System.out.println(temp);
}

ここで、scan はファイルに対するスキャナーです。

ただし、約 6k 文字の長さのある特定の行では、temp は 2470 文字の後に切り取られます。切れるときは特別なことは何もありません。「オーストラリア」という言葉の真ん中にあります。行から文字を削除すると、切り取られる場所が変わります。たとえば、ファイル内の文字 0 ~ 100 を削除すると、スキャナは以前は 100 ~ 2570 だったものを取得します。

以前、より大きな文字列に Scanner を使用したことがあります。何がうまくいかないのでしょうか?

4

1 に答える 1

8

推測では、カットオフ ポイントに不正なキャラクターがいる可能性があります。テキスト エディターだけでなく、16 進エディターでファイルを確認してください。ヌル文字が埋め込まれ\rているか、文字列の途中にある可能性がありますか? Scanner.nextLine()恣意的にそれを切り刻むことは私にはありそうにないようです。

別の考えとして、それがすべてではないことを 100% 確信していますか? おそらく、 System.out.println が文字列を切り刻んでいます-これも、「奇妙な」文字が埋め込まれているためですか? 印刷するとどうなりますtemp.length()か?

編集: 一部の文字を切り取るとどうなるかについて、少し誤解していました。申し訳ありません。他に確認すべき点がいくつかあります。

  • BufferedReader.readLine()の代わりに を使用して行を読むと、Scannerすべて取得されますか?
  • 正しいエンコーディングを指定していますか? なぜこれがこの特定の方法で表示されるのかわかりませんが、考えるべきことです...
  • 行内のすべての文字を(ファイル内の)「A」に置き換えると、何かが変わりますか?
  • この行の前に余分な行を追加 (またはその前の行を削除) すると、何かが変わりますか?

これらすべてに失敗した場合は、デバッグするだけScanner.nextLine()です。Java の優れた点の 1 つは、標準ライブラリにデバッグできることです。

于 2010-05-23T07:51:11.483 に答える