我想从给定的字符串中找到重复的单词。
我想要一个正则表达式来查找单词的每个出现位置。
例如"I want to eat apple. apple is a fruit"
。
正则表达式应找出单词"apple"
。
答案 0 :(得分:1)
这适用于多次重复和多行:
Pattern p = Pattern.compile("\\b(\\w+)\\b(?=.*\\b(\\1)\\b)", Pattern.DOTALL);
String s = "I want to eat apple. apple is a fruit.\r\n I really want fruit.";
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println("at: " + m.start(1) + " " + m.group(1));
System.out.println(" " + m.start(2) + " " + m.group(2));
}
输出:
at: 0 I
41 I
at: 2 want
50 want
at: 14 apple
21 apple
at: 32 fruit
55 fruit
答案 1 :(得分:1)
您可以使用以下内容匹配一行中的所有重复字词。
(\\b\\w+\\b)(?=.*\\b\\1\\b) // matches duplicates only in a single line
修改:如果您想在多行中匹配重复项,可以使用:
(\\b\\w+\\b)(?=[\\s\\S]*\\b\\1\\b) // or the above regex with DOTALL flag
答案 2 :(得分:0)
此方法删除任何非字母数字或空格的内容,在空白处拆分并创建Map
个结果。
Stream.of("I? want.... to eat apple eat apple. apple, is! a fruit".split("[^\\p{L}\\p{N}]+"))
.collect(Collectors.groupingBy(s -> s))
结果:
a=[a], apple=[apple, apple, apple], fruit=[fruit], want=[want], eat=[eat, eat], I=[I], is=[is], to=[to]