2015-08-11 14 views
5

Ich versuche, eine Zahl zu nehmen, wandeln Sie es in eine Zeichenfolge um und ersetzen Sie alle Zeichen, die kein Triple sind.Java regex negativer Lookahead zum Ersetzen von nicht-dreifachen Zeichen

Eg. Wenn ich 1222331 übergebe, sollte meine Ersetzungsmethode 222 zurückgeben. Ich kann feststellen, dass dieses Muster existiert, aber ich muss den Wert erhalten und in eine Zeichenfolge für zusätzliche Logik speichern. Ich möchte keine for-Schleife ausführen, um diese Zeichenfolge zu durchlaufen.

Ich habe den folgenden Code:

String first = Integer.toString(num1); 
String x = first.replaceAll("^((?!([0-9])\\3{2})).*$",""); 

Aber es ersetzt auch die dreistelligen Bereich. Ich brauche es nur, um den Rest der Charaktere zu ersetzen. Ist meine Vorgehensweise falsch?

+4

Vielleicht 'first = first.replaceAll (" ((\\ d) \\ 2 {2}) | \\ d "," $ 1 ");'? –

+0

@jorge Campos, dass man nicht gearbeitet hat, da es gerade 3 Zahlen hintereinander zurückgegeben hat. – Help123

+0

@Stribizhev, dass man gearbeitet hat! Vielen Dank. Ich hätte eine strikte Erfassung verwenden sollen, anstatt negatives Lookahead zu verwenden. – Help123

Antwort

3

können Sie

first = first.replaceAll("((\\d)\\2{2})|\\d", "$1"); 

regex demo

die Regex nachschauen - ((\d)\2{2})|\d - Spiele entweder eine Ziffer, die dreimal wiederholt (und fängt es in Gruppe 1) oder passt einfach jede andere Ziffer. $1 stellt nur den erfassten Text in der resultierenden Zeichenfolge wieder her, während alle anderen entfernt werden.

+0

Funktioniert es für Sie oder benötigen Sie weitere Informationen? –

Verwandte Themen