用正则表达式“\ S +”计数单词

时间:2011-08-02 19:10:33

标签: java regex

为什么wordCount在下面的代码中最终为1而不是5?

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class WordCount {

    public static void main(String[] args) {
        final Pattern wordCountRegularExpression = Pattern.compile("\\S+");
        final Matcher matcher = wordCountRegularExpression
                .matcher("one two three four five");
        int wordCount = 0;
        while (matcher.find()) {
            wordCount++;
        }
        System.out.println("wordCount: " + wordCount);
    }
}

模式“\ S +”是否与单词匹配,因为它表示一个或多个非空格字符?

顺便说一下:

    final Pattern wordCountRegularExpression = Pattern.compile("\\b\\w+\\b");

但我仍然不明白为什么原始代码不起作用。

3 个答案:

答案 0 :(得分:1)

  

模式“\ S +”是否与单词匹配,因为它表示一个或多个非空格字符?

Yes.

答案 1 :(得分:1)

使用

import java.util.regex.*; 

在java 7中,有以下模式:

Pattern.compile("\\S+");

不会计算单词,而是空格。

所以,输入应该返回4:“一二三四五”,因为它有4个空格。

答案 2 :(得分:0)

这取决于你用什么来分隔单词。当我将你的问题中的代码复制到我的编辑器中时,我会看到简单的旧空格(U+0020),但是当我查看页面时,我看到了不间断的空格(U+00A0)。 Java不会将NBSP识别为空白字符。

现在的问题是为什么我在字符串文字中看到NBSP,但在其他地方?为什么我复制/粘贴时会将它们转换为空格?还有其他人看到了吗?