7

次のようなテキスト ファイルから長い情報を読み取っています。

Sebastien 5000\\Loic 5000\\Shubhashisshh 5000\\Thibaullt 5000\\Caroo 5000\\Blabla 5000\\Okayyy 5000\\SebCed 5000\\abusee 5000\\omg 5000\\

ユーザー名で高得点のはずです。行を印刷すると、本来のように見えますが、 を使用した後に配列を印刷すると、split("\\\\")次のようになります。

[Sebastien 5000, , Loic 5000, , Shubhashisshh 5000, , Thibaullt 5000, , Caroo 5000, , Blabla 5000, , Okayyy 5000, , SebCed 5000, , abusee 5000, , omg 5000]

問題は、問題はArray[0]ありませんが、、 などArray[1]のように空です。Array[3]Array[5]

これが私のコードです。どうしたの?

            BufferedReader in = null;
    try {
        in = new BufferedReader(new FileReader(path));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

    String line = null;
    try {
        line = in.readLine();
    } catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println("LINE = "+line);

    String[] scores = line.split("\\\\");

    System.out.println("Mode = "+mode+Arrays.toString(scores));
4

3 に答える 3

9

これ"\\\\"は、 が として解析され\\分割メソッドが正規表現を使用するためです\\\Sebastien 5000\\Loic 5000[Sebastien 5000,,Loic 5000]

代わりにこれを行います:"\\\\\\\\"

于 2012-12-11T16:57:55.963 に答える
3

楽しみのために、José Roberto ソリューションは別として、いくつかの代替表現 (および他の多くの表現) を使用することもできます。

2 つの連続したバックスラッシュ (José のものと同じですが、量指定子を使用):

String[] scores = line.split("\\\\{2}");

2 つの連続する単語以外の文字:

String[] scores = line.split("\\W{2}");

2 つの連続する句読点文字:

String[] scores = line.split("\\p{Punct}{2}");

それらはすべて、必要な出力を生成します。

Java での正規表現の詳細については、次を参照してください。

于 2012-12-11T17:24:43.270 に答える
0

私はニックよりも1つ先に進んでいたでしょう:

line.split("\\\");

このビューは、二重のバックスラッシュが表示される各ポイントで行を分割しようとしていることを前提としています-コードが交互の二重スラッシュごとに分割されているように見えます。これにより、各名前間の二重のコンマが説明されます。したがって、各分割部分間 (つまり、コンマ間のセクションのそれぞれに、1 つではなく 2 つのエントリがあるため、1 つのエントリは単にコンマだけになります)。これが機能するかどうかを確認してください-頑張ってください!!

M.

于 2012-12-11T17:10:57.640 に答える