1

我有以下字符串示例:

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

在单独的文本文件中。数字由制表符而不是空格分隔。

如果它与给定的正则表达式匹配,我尝试读取文件并打印每一行,但我找不到适合这些行的正则表达式。

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]匹配一个数字,但您的输入通常在 TAB 字符之间有多个数字。您需要使用[0-9]+来匹配每个数字。(+表示前一个的一个或多个重复......)

但更简单的解决方案是使用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 回答