2016-05-07 10 views
0

Ich versuche, Strings mit wiederholten Zeichen zu verarbeiten, um das richtige Wort in einem Wörterbuch zu finden.Wie entferne ich 3 oder mehr aufeinanderfolgende Buchstaben in Java in 2 aufeinanderfolgende Buchstaben?

Der Ansatz, den ich verwenden muss, ist, Wörter mit 3 oder mehr aufeinanderfolgenden Buchstaben zu finden und sie in 2 aufeinanderfolgenden Buchstaben zu entfernen.

Dann werde ich im Wörterbuch suchen, wenn dieses Wort existiert. Wenn das Wort nicht existiert, dann muss ich die zwei aufeinanderfolgenden Buchstaben in nur einen Buchstaben entfernen.

Beispiel:

gooooooood -> good (this existis) 
awesooooome -> awesoome (this doesn't exist) -> awesome (this exists) 
aaawwwesooooooommmme -> aawwesoomme (this doesn't exist) -> awesome (this exists) 

ich mit JAVA bin arbeiten, und ich bin schon diesen regulären Ausdruck unter Verwendung der Worte mit 3 oder mehr wiederholt Buchstaben in einer Zeichenfolge zu erhalten:

Pattern p = Pattern.compile("\\b\\w*(\\w)\\1{2}\\w*"); 
+0

"ggoodood" -> "ggood" -> "Gott"? –

+0

Sasha Salauyou, das ist gut gemeint. In diesem Fall denke ich, dass ich immer zuerst die Konsonanten und dann die Vokale ausführen muss. "ggoodood" -> "ggoood" -> "goood" -> "gut" – user1201779

+0

Ist das gleich zu entfernen von 3 der eine und von 2 der eine? – Rafael

Antwort

1

Sie Mit dieser regex ("pure Version") können:

(\b\w*?)(\w)\2{2,}(\w*) 

String Version:

"(\\b\\w*?)(\\w)\\2{2,}(\\w*)" 

sollten Sie replaceAll(regex, "$1$2$2$3")

Erklärung

(\b\w*?) // capture group 1 is lazy 
(\w)  // capture group 2 captures the first occurrence of the char 
\2{2,} // char may occur 2 or more times... 
(\w*) // capture group 3 

Hinweis verwenden, dass die $number im Austausch zu den Inhalten der entsprechenden Capture-Gruppe bezieht.

1

können Sie es auch tun, wie folgt aus:

Pattern pattern = Pattern.compile("(\\w)\\1{2,}"); 
System.out.println(pattern.matcher("gooooooood").replaceAll("$1$1")); 
System.out.println(pattern.matcher("awesooooome").replaceAll("$1$1")); 
System.out.println(pattern.matcher("aaawwwesooooooommmme").replaceAll("$1$1")); 

Ausgang:

good 
awesoome 
aawwesoomme 

Und für den zweiten Schritt, hier, wie Sie es tun können:

Pattern pattern2 = Pattern.compile("(\\w)\\1"); 
System.out.println(pattern2.matcher("awesoome").replaceAll("$1")); 
System.out.println(pattern2.matcher("aawwesoomme").replaceAll("$1")); 

Ausgabe:

awesome 
awesome 
Verwandte Themen