2016-06-30 11 views
4

Ich versuche, die Felder in einer benutzerdefinierten Zeichenfolge zu finden und ein Array daraus zu erstellen. Zum Beispiel, wenn der Benutzer eingibt:Verwenden von regulären Ausdrücken zum Aufteilen einer Zeichenfolge in Java

abc @{fieldOne} defg @{FieldTwo} 123 @{FieldThree} zyx 

Ich mag als Ergebnis:

fields[0] = "@{fieldOne}" 
fields[1] = "@{fieldTwo}" 
fields[2] = "@{FieldThree}" 

ich einen regulären Ausdruck habe die Substrings zu finden: /@{[a-zA-Z]*}/g aber ich habe bei der Verwendung es nicht erfolgreich gewesen in Java, um die Zeichenfolge aufzubrechen. Hier ist, was ich im Moment haben, und versucht, Variationen:

String displayString = "abc @{fieldOne} defg @{FieldTwo} 123 @{FieldThree} zyx"; 
Pattern pattern = Pattern.compile("/@\\{[a-zA-Z]*\\}/g"); 
Matcher matcher = pattern.matcher(displayString); 

matcher.matches() kehrt falsch - ich vermute, die Formatierung meiner regulären Ausdruck ist falsch, aber ich habe nicht in der Lage gewesen, um herauszufinden, was es sollte sein.

Vielen Dank im Voraus für Kommentare und Antworten!

Antwort

8

Keine Notwendigkeit für die Vorwärts Schrägstriche oder //g Modifikator. Verwenden Sie auch doppelte Escapes.

String displayString = "abc @{fieldOne} defg @{FieldTwo} 123 @{FieldThree} zyx"; 

Pattern pattern = Pattern.compile("@\\{[a-zA-Z]*\\}"); 
Matcher matcher = pattern.matcher(displayString); 
while (matcher.find()){ 
    System.out.println(matcher.group(0)); 
} 
+0

Perfekt, danke! (Ich hatte doppelte Schrägstriche, nur nicht in meinem ursprünglichen SO Post). Mein Hauptproblem war 'matcher.matches()' zu verwenden, da das nicht das tat, was ich erwartete .. also egal was ich als Regex hatte, das falsch zurückkehrte. Danke für die Veröffentlichung der Ergebnisse der Spiele! – Nikki

Verwandte Themen