0

シンプルな Java プログラムでjava.util.Scannerを使用して、以下のテキスト ファイルを読み込もうとしています。

0001;GUAJARA-MIRIM;RO
0002;ALTO ALEGRE DOS PARECIS;RO
0003;PORTO VELHO;RO

以下のコードを使用してテキスト ファイルを読み取ります。

scanner = new Scanner(filerader).useDelimiter("\\;|\\n");
while (scanner.hasNext()) {
    int id= scanner.nextInt();
    String name = scanner.next();
    String code = scanner.next();

    System.out.printf(".%s.%s.%d.\n", name, code, id);
}

結果は次のとおりです。

.GUAJARA-MIRIM.RO.1
.
.ALTO ALEGRE DOS PARECIS.RO.2
.
.PORTO VELHO.RO.3
.

しかし、各行の 3 番目のトークンの結果には、末尾に不都合な '\r' 文字があります (ANSI コード 13)。理由はわかりません (フォーマット文字列に「.」文字を使用して、「\r」がどこにあるかを明確にしました)。

そう、

  1. 3 番目のトークンの末尾に「\r」があるのはなぜですか?
  2. それをバイパスする方法。

のような回避策を使用するのは非常に簡単code.substring(0, 2)ですが、代わりに「\r」文字がある理由を理解したいと思います。

4

3 に答える 3

1

\r\n行区切り文字 (別名キャリッジ リターン ライン フィード) として使用する Windows ファイルを使用しています。Unix は\n(改行) のみを使用します。

これを修正する\rには、スキャナー区切り文字に追加します。

于 2012-11-30T16:45:05.187 に答える
1

一部のファイル システム (特に Windows) では、改行文字\r\nが使用されます。デリミタのみを使用しているため、そのままにしておきます。区切り文字にも追加してください。\n\r\r

コードをもう少し堅牢にするために、 を使用System.lineSeparator()して改行文字を取得し、それに応じて区切り記号を使用します。

于 2012-11-30T16:45:59.307 に答える
0

それが発生する理由はすでに説明されています。これを回避する他の方法は、を使用scanner.nextLine()してから;で分割することです。。

于 2012-11-30T16:54:00.323 に答える