在删除连续重复的单词中,我们将采取
"alpha beta beta gamma gamma gamma delta alpha beta beta gamma gamma gamma delta"
作为输入字符串和输出。
"alpha beta gamma delta alpha beta gamma delta"
我看到的解决方案之一是。非常优雅,但我仍然在正则表达式中挣扎
public class Kata {
public static String removeConsecutiveDuplicates(String s){
return s.replaceAll("(\\b\\S+)( \\1\\b)+", "$1");
}
}
\\b
表示单词边界。 \\s+
的意思。一个或多个空白处。
( \\1)
表示第一组即(\\b\\S+)
。 ( \\1\\b)+
表示匹配第一组和重复的单词,对吗? 我确信 ( \\1\\b)+
中的空白区域实际上是做什么的。
我什么都没尝试。
((?:\\b)\\S+\\b(?:\\s*))(?:\\s*\\1){1,}
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Solution {
public static void main(String[] args) {
final String regex = "((?:\\b)\\S+\\b(?:\\s*))(?:\\s*\\1){1,}";
final String string = "gamma gamma gamma gamma alpha beta beta gamma gamma gamma delta alpha beta beta gamma gamma gamma delta delta";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
Full match: gamma gamma gamma gamma
Group 1: gamma
Full match: beta beta
Group 1: beta
Full match: gamma gamma gamma
Group 1: gamma
Full match: beta beta
Group 1: beta
Full match: gamma gamma gamma
Group 1: gamma
Full match: delta delta
Group 1: delta