所以,我试图解析一些有多行文本的文本文件。我的工作是仔细阅读所有文字并将其打印出来。
所以,我读了所有的行,我循环遍历它们并用空格分割每一行,如下所示:
line.split("\\s+");
现在,问题是在某些情况下Java没有在两个单词之间看到空格......
我还试图遍历有空格的字符串,但Java没有看到它,Character.isSpaceChar(char)
返回true ...
现在我完全糊涂了......
这是代码:
public void createMap(String inputPath, String outputPath)
throws IOException {
File f = new File(inputPath);
FileWriter fw = new FileWriter(outputPath);
List<String> lines = Files.readAllLines(f.toPath(),
StandardCharsets.UTF_8);
for (String l : lines) {
for (String w : l.split("\\s+")) {
if (isNotRubbish(w.trim())) {
fw.write(w.trim() + "\n");
}
}
}
fw.close();
}
private boolean isNotRubbish(String w) {
Pattern p = Pattern.compile("@?\\p{L}+",
Pattern.UNICODE_CHARACTER_CLASS);
Matcher m = p.matcher(w);
return m.matches();
}
答案 0 :(得分:1)
我怀疑您的文字字符与non-breakable-space类似,而不是空格,因此无法通过\\s
进行匹配。
在这种情况下,请尝试使用\p{Zs}
代替\s
。
正如http://www.regular-expressions.info/unicode.html
中所述
\p{Zs}
将匹配任何类型的空格字符
顺便说一句,如果您还希望包含除制表符\t
或换行符\r
\n
之类的其他分隔符,则可以将\p{Zs}
与\s
合并为[\p{Zs}\s]