2017-03-21 1 views
0

Ich möchte String ersetzt werden, aber ich kann nicht lösen, welche Regex sollte verwendet werden.Ersatz benötigt mit replaceAll Methode

Erstens habe ich viele string so;

String rawString = "w1.28-user_request" 

Dann möchte ich die Zeichenfolge so erhalten;

w1_28-user_request

Wie ich sagte, dass ich so eine Schnur haben; week1.detailed_design so in diesem Fall werde ich week1_detailed_design haben. Schließlich, dass ich nur den Fall behandeln w1.23_design_req-open

PS: Benutzer, Anfrage usw. sind nur ein Beispiel zu benennen Objekt

Bitte beachten Sie, dass unter Verwendung für mich nicht sinnvoll ist, weil ich schon "." gehabt haben andere als oben Fall. Zum Beispiel;

user.request_updated

Also muss ich weiß nur, wie kann ich den Fall für diese handhaben: w2.25-update_request

rawString.replaceAll("\\.","_"); // not useful 

Schließlich Muster sind unten;

  • string1.2string sollte string1_2string sein
  • 1.2string sollte sein 1_2string
  • string1.2 sollte string1_2
+0

Ist der 'user' Teil das immer 'user'? Ist der 'w' Teil immer' w'? –

+1

Meinen Sie, Sie müssen ein "." Mit Ziffern ersetzen? 'rawString.replaceAll (" (\\ d) \\. (\\ d) "," $ 1_ $ 2 ");'? –

+0

Oder, wenn es genauer ist für dieses 'w #. ## - user_request':' String result = rawString.replaceAll ("(w \\ d) \\. (\\ d + -user_request)", "$ 1_ $ 2"); ' –

Antwort

1

Sie müssen ersetzen e ein . mit Ziffern beigefügt.

Verwenden

rawString = rawString.replaceAll("(\\d)\\.(\\d)","$1_$2"); 

Musterdetails:

  • (\\d) - eine Ziffer in Gruppen eingefangen 1 (bezeichnet durch $1 aus dem Ersetzungsmuster)
  • \\. - Literal dot
  • (\\d) - eine Ziffer in Gruppe gefangen 2 (bezogen auf über $2 aus dem Ersetzungsmuster)

Siehe Java demo:

List<String> strs = Arrays.asList("string1.2string", "string1.2", "1.2string"); 
for (String str : strs) 
    System.out.println(str.replaceAll("(\\d)\\.(\\d)", "$1_$2")); 

Ausgang:

string1_2string 
string1_2 
1_2string