我如何在Java程序中使用RegEx?

时间:2012-11-30 05:23:44

标签: java regex

我有以下字符串示例:

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);
}

我最后没有打印任何字符串!!

2 个答案:

答案 0 :(得分:5)

问题是[0-9]只匹配一位数,但您的输入通常在TAB字符之间有多位数。您需要使用[0-9]+来匹配每个号码。 (+表示先前的一次或多次重复...)

但更简单的解决方案是使用String.split(...) ...阅读javadoc。

答案 1 :(得分:0)

使用它 String regEx = "[0-9]+\s[0-9]+\s[0-9]+\s[0-9]+";

  • 至少1个字符&上述
  • 至少0个字符&上述

{2,3}至少2个字符&最多3个字符