2017-12-15 3 views
-1

Ich habe eine Zeichenfolge wie untenWie ersetzt man das Zeichen im zweiten Wort eines Strings?

String inp = "Monday 02nd January 2017"; 

Ich möchte von dem zweiten Wort letzten zwei Zeichen ersetzen. Meine Ausgabe sollte wie folgt aussehen.

Monday 02 January 2017 

Ich habe einen regulären Ausdruck erstellt, die mir die letzten zwei Zeichen des zweiten Worts in einer Zeichenfolge gibt, aber ich bin nicht sicher, wie sie mit nichts zu ersetzen.

Hier meine regex ist und Ersetzen-Funktion

regex = "^(?:\\S+\\s){1}\\S+(\\w{2})\\b.*"; 
String op = inp.replaceAll(inp.replaceAll(regex, "$1"), ""); 

Denn wie es manchmal geschieht, meine Eingabezeichenfolge ist wie August 01st January 2017 und wenn ich „st“ ersetzen ersetzt alle „st“ in einer Zeichenkette. Ich möchte nicht so passieren. Es sollte genau die letzten zwei Zeichen vom zweiten Wort ersetzen.

Darf ich bitte wissen, wie kann ich dies in Java erreichen?

+2

Was ist mit 'String op = inp.replaceAll (" (\\ d) (?: st | nd | rd | th) \\ b "," $ 1 ");'? –

+0

@ WiktorStribiżew, Es funktioniert wie eine Magie ... !! Kannst du bitte deine Regex erklären? – linuxman

+1

Unmöglich, das Ergebnis ist ['Montag, 02. Januar 2017'] (https://ideone.com/U0Kxe2) –

Antwort

1

Try this:

(?<=\w)(\w+)\w{2} 

Verwenden Sie diese mit replaceFirst und als $1 im Ersatz passieren.

Erläuterung:

Das Lookbehind den Beginn des zweiten Wortes findet, da Sie replaceFirst verwenden, wird es das erste Spiel (das zweite Wort) und stoppen, statt Ausübung zu finden, um den dritten und vierten finden Wörter.

Dann erfassen wir eine Reihe von Wort Zeichen, gefolgt von 2 Wort Zeichen nicht erfasst.

Verwandte Themen