1

次の文字列の例があります。

00001 1 12 123
00002 3 7 321
00003 99 23 332
00004 192 50 912

別のテキストファイル。数字はスペースではなくタブで区切られます。

ファイルを読み取って、特定のRegExpと一致する場合は各行を印刷しようとしましたが、これらの行に適したRegExpが見つかりませんでした。

private static void readFile() {
    String      fileName = "processes.lst";
    FileReader  file = null;
    String      result = "";


    try {
        file = new FileReader(fileName);
        BufferedReader reader = new BufferedReader(file);

        String line = null;
        String regEx = "[0-9]\t[0-9]\t[0-9]\t[0-9]";
        while((line = reader.readLine()) != null)  {
            if(line.matches(regEx)) {
                result += "\n" + line;
            }
        }
    } catch(Exception e) {
        System.out.println(e.getMessage());
    } finally {
        if(file != null)
            try {
                file.close();
            } catch(Exception e) {
                System.out.println(e.getMessage());
            }
    }

    System.out.println(result);
}

文字列が印刷されずに終わってしまいました!!

4

2 に答える 2

5

問題は、[0-9]正確に1桁に一致することですが、入力のTAB文字の間に複数の桁があることがよくあります。[0-9]+各番号を一致させるためにを使用する必要があります。(+前の1つ以上の繰り返しを意味します...)

しかし、より簡単な解決策は、String.split(...)...javadocを読むことです。

于 2012-11-30T05:38:49.293 に答える
0

これを使って String regEx = "[0-9]+\s[0-9]+\s[0-9]+\s[0-9]+";

  • 1文字以上の場合
  • 最小0文字以上の場合

{2,3}最小2文字および最大3文字

于 2012-12-03T11:35:09.077 に答える