Java没有在字符串中看到空格

时间:2014-03-23 00:54:36

标签: java string split char

所以,我试图解析一些有多行文本的文本文件。我的工作是仔细阅读所有文字并将其打印出来。

所以,我读了所有的行,我循环遍历它们并用空格分割每一行,如下所示:

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

1 个答案:

答案 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]