【问题标题】:Java doesn't see space in string [closed]Java在字符串中看不到空格[关闭]
【发布时间】:2023-03-24 17:36:01
【问题描述】:

所以,我正在尝试解析一些包含多行文本的文本文件。我的工作是浏览所有单词并将它们打印在文件中。

所以,我阅读了所有的行,我正在循环它们并用空格分隔每一行,如下所示:

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

【问题讨论】:

  • 你能给那些一些案例提供一个可重现的例子吗?
  • 所以,也许它不是 ASCII 空格。但不可能说,因为您提供的可操作细节很少。
  • 当然...我忘了举个例子Beogradu u fajlu Štaba vrhovne komande ( JVUO ) pod oznakom K那里,“u fajlu”和“oznakom K”没有分开,但其他的都是
  • 没有看到实际复制/粘贴的数据样本,以及line.split() 周围的代码,不太可能有人可以帮助您。
  • 打印每个字符的整数值以确定这些空格字符实际上是什么

标签: java string split char


【解决方案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]

【讨论】:

  • 好吧,现在我有另一个问题......如何用空格或不可打印的ASCII分割字符串
  • 谢谢伙计...我可以投票给你,因为我的声誉:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 2012-04-26
  • 2014-08-26
  • 1970-01-01
相关资源
最近更新 更多