如何在Java中检测String中的重复单词?

可以检测字符串中重复单词的方法是什么?

例如“这是重复测试的测试消息”包含一个重复的单词测试。

这里,目标是检测String中出现的所有重复单词。

使用正则表达式对于实现目标是优选的。

使用正则表达式可以做的最好的是O(N^2)搜索复杂度。 通过将输入拆分为单词并使用HashSet检测重复项,您可以轻松实现O(N)时间和空间搜索的复杂性。

以下Java代码解决了从String检测重复项的问题。 如果重复的单词由换行符或标点符号分隔,则不应该有任何问题。

  String duplicatePattern = "(?i)\\b(\\w+)\\b[\\w\\W]*\\b\\1\\b"; Pattern p = Pattern.compile(duplicatePattern); String phrase = "this is#$;%@;<>?|\\` p is a is Test\n of duplicate test"; Matcher m = p.matcher(phrase); String val = null; while (m.find()) { val = m.group(); System.out.println("Matching segment is \"" + val + "\""); System.out.println("Duplicate word: " + m.group(1)+ "\n"); } 

代码的输出将是:

 Matching segment is "is#$;%@;<>?|\` p is a is" Duplicate word: is Matching segment is "Test of duplicate test" Duplicate word: Test 

这里,m.group(1)语句表示与第一组Pattern匹配的String [这里,它是(\\ w +)]。