1

次のようなファイルから文字列を解析しようとしています。

Mark Henry, Tiger Woods, James the Golfer, Bob,
3, 4, 5, 1,
1, 2, 3, 5,
6, 2, 1, 4,

使いやすくするために、整数値に変換できない唯一の行になるため、文字列の最初の行を分割したいと思います (残りは整数の double 配列に格納されます[行] [値] ]);

String.split("\\\n")各行を独自の文字列に分割するために使用しようとしましたが、これは機能します。ただし、新しい文字列を で部分文字列に分割することはできませんString.split("\\,")。何が起こっているのかわかりません:

    String[] firstsplit = fileOne.split("\\\n");
    System.out.println("file split into " + firstsplit.length + " parts");

    for (int i = 0; i < firstsplit.length; i++){
        System.out.println(firstsplit[i]);  // prints values to verify it works
    }

    String firstLine = firstsplit[0];
    String[] secondSplit = firstLine.split("\\,");
    System.out.println(secondSplit[0]);  // prints nothing for some reason

私はこれでさまざまなことを試しましたが、何もうまくいかないようです (新しい String へのコピーは、それを機能させる試みでもあります)。助言がありますか?

編集:私はそれを変更してString.split(",")試しString.split(", ") ましたが、後で印刷するものはまだありません。

おそらく最初の場所は空白の場所である可能性があります....テストした後、これが真実であることがわかり、すべてが機能することがわかりましたfirstsplit[1]

4

4 に答える 4

3

を分割しようとしていますが\\,、これは実際の値に変換されます\,。だけ逃げたい,

于 2013-05-11T20:41:47.090 に答える
2

特殊文字ではないため、その前にカンマ,は必要ありません。の代わりに を\使用してみてください(コンマだけでなく、バ​​ックスラッシュも) に変換されます。,\\,\,

于 2013-05-11T20:43:57.137 に答える
0

コンマをエスケープする必要がないだけでなく、改行文字に 3 つのバックスラッシュも必要ありません。

String[] firstSplit = fileOne.split("\n");

それはうまくいきます。指定した文字列を使用してコードをテストしましたが、実際には問題なく動作し、不要なエスケープなしで問題なく分割できました...

質問で提供した文字列データで実際にテストしたことがありますか、それとも実際のデータが何か他のものである可能性があります。キャリッジ リターン (Windows ファイルなど) が心配\r\nでしたが、テストでは問題ありませんでした。実際に解析している文字列データをスクラブし、元の文字列 ( fileOne) のサンプル出力を提供できれば、非常に役立ちます。

于 2013-05-11T21:08:17.037 に答える
0

ファイルを行のリストにロードするだけです:

fin = new FileInputStream(filename);
bin = new BufferedReader(new InputStreamReader(fin));
String line = null;
List<String> lines = new ArrayList<>();
while (( line = bin.readLine()) != null ) {
    lines.add( line );
}
fin.close();

もちろん、例外処理に適合するいくつかの try catch ブロックにこのようなものを含める必要があります。次に、次のように 2 番目の行から始まる行を解析します。

for ( int i = 1; i < lines.size(); i++ ) {
    String[] values = lines.get( i ).split( "," );
}
于 2013-05-11T21:42:28.610 に答える