2016-03-24 5 views
0

Ich versuche, einen regulären Ausdruck zu schreiben, um zuerst unter wiederholten Zeichen in einer Zeichenfolge zu ersetzen.Java Regex ersetzen wiederholte Zeichen (einschließlich nicht folgerichtig)

Der Haken ist die wiederholte Zeichen können auch nicht folgerichtig sein.

Ex: 

    Input: abcdebg 
    Replace by character: x 
    Expected Output: axcdebg 

Ich habe versucht, dies mit einem regulären Ausdruck zu tun: (.).*(\\1) Aber das Ergebnis, wenn ich ein ersetzen tun ist: axg

Bitte legen nahe, wie ich das erwartete Ergebnis erzielen kann.

Danke,
Sash

+0

Können Sie erklären _first unter wiederholten Zeichen in einer Zeichenfolge_? –

+0

@noob In dem gegebenen Beispiel ist 'b' ein wiederholtes Zeichen, ich möchte tatsächlich eines der Vorkommen von 'b' ersetzen –

+0

Sie erwarteten also, Ausgabe ist 'axcdexg'? –

Antwort

2

Das Problem hierbei ist, dass Sie den Rest des Strings bis zum wiederholten Charakter als auch, es ihnen gleich was auch bedeutet, ersetzt es. Sie müssen es erfassen und erneut hinzufügen.

So

regex: (.)(.*?\\1)

Ersetzen durch (für x): x\2

+0

Vielen Dank für die schnelle Antwort. Ich versuchte (.) (. *? \ 1) und die replaceFirst gibt mir immer noch die falsche Antwort (genau wie meine): axg –

+1

Bro, sorry, ich habe replaceAll mit x $ 2 versucht und es sieht aus wie es funktioniert. Lassen Sie mich mit ein paar Eingaben versuchen und ich werde Ihre Antwort akzeptieren. Vielen Dank –

0

Sie können diesen Look-Ahead verwenden basierte regex ein Zeichen ersetzen nur, wenn gleiche Zeichen voraus in Eingang gefunden wird:

String str = "abcdebg"; 
String repl = str.replaceFirst("(.)(?=.*\\1)", "x"); 
//=> axcdebg 
Verwandte Themen