Der folgende Ausdruck sollte korrekt funktionieren, um eine beliebige Anzahl aufeinanderfolgender Wörter zu finden. Bei der Zuordnung kann die Groß- und Kleinschreibung nicht berücksichtigt werden.
String regex = "\\b(\\w+)(\\s+\\1\\b)*";
Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(input);
// Check for subsequences of input that match the compiled pattern
while (m.find()) {
input = input.replaceAll(m.group(0), m.group(1));
}
Beispieleingabe: Auf Wiedersehen Auf Wiedersehen GooDbYe
Beispielausgabe: Auf Wiedersehen
Erläuterung:
Der Regex-Ausdruck:
\ b: Beginn einer Wortgrenze
\ w +: Beliebig viele Wortzeichen
(\ s + \ 1 \ b) *: Beliebige Anzahl von Leerzeichen, gefolgt von Wörtern, die mit dem vorherigen Wort übereinstimmen und die Wortgrenze beenden. Das Ganze in * hilft, mehr als eine Wiederholung zu finden.
Gruppierung:
m.group (0): Enthält im obigen Fall die übereinstimmende Gruppe. Auf Wiedersehen, auf Wiedersehen, GooDbYe
m.group (1): Enthält im obigen Fall das erste Wort des übereinstimmenden Musters. Auf Wiedersehen
Die Ersetzungsmethode ersetzt alle aufeinanderfolgenden übereinstimmenden Wörter durch die erste Instanz des Wortes.