算不了.在java中使用正则表达式的单词

rgk*_*gan 2 java regex

如何使用正则表达式计算每个单词在Java中出现在String中的次数?

小智 6

我不认为正则表达式可以完全解决您的问题.

你想要

  1. 将一个字符串拆分成单词,一个正则表达式可以做一个非常简单的单词定义,"用空格或标点分隔的字符串部分",即使你只是坚持英文文本也不是一个很好的定义

  2. 计算从步骤1派生的每个单词的出现次数.为此,您必须存储某种映射,并且正则表达式既不存储也不计数.

一种可行的方法可能是

  • 将输入字符串(通过正则表达式或其他方式)拆分为字符串数组
  • 迭代数组,并构建一个Map以保持每个单词的计数
  • 迭代地图以输出单词列表和出现次数.

如果您的输入仅限于英语,您仍然需要考虑您希望算法的行为方式,例如它们是< - >它们是等等和复合词.添加其他语言以进行其他类型的麻烦(写同一个单词的不同方式,分成部分的单词,写作的差异取决于单词出现在句子中的位置等)


rom*_*oll 5

我会将你的任务分成a)识别单词和b)计算文本中每个唯一单词的数量.

a)可以通过使用正则表达式分割文本来解决.b)可以通过使用a)的结果构建地图来解决.

String text = "I like good mules. Mules are good :)";
String[] words = text.split("([\\W\\s]+)");
Map<String, Integer> counts = new HashMap<String, Integer>();
for (String word: words) {
    if (counts.containsKey(word)) {
        counts.put(word, counts.get(word) + 1);
    } else {
        counts.put(word, 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:{Mules = 1,= 1,良好= 2,骡子= 1,喜欢= 1,I = 1}

  • `\ W`也匹配`\ s`:所以不需要在字符集中包含`\ s`. (2认同)