我有以下字符串示例:
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);
}
我最后没有打印任何字符串!!
答案 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]+";
{2,3}至少2个字符&最多3个字符