2016-08-09 2 views
1

Ich habe zwei Strings:Java-String abgrenzen regex mit Wort, Leerzeichen und Sonderzeichen

String one = "D -> B: 24"; // I am expecting array to have ['D','B','24'] 
String two = "route D -> C"; // expecting array to have ['D','C'] 

Meine regex ist:

String myarray[] = input.split("\\s*(->|:|\\s)\\s*"); 

Ich bin Einheit das Ergebnis zu testen, für String man es funktioniert Fein und gibt mir genau 3 im Array zurück, aber für den zweiten String zwei gibt es auch einen leeren Platz im Array zurück.

Was mache ich falsch? Bitte helfen Sie.

Dank


Der String zwei Renditen 3 Elemente im Array, [, 'D', 'C']

+0

Was ist der Rückgabewert für die Zeichenfolge zwei? Welchen Raum fängt es ein? – cxw

+0

'[A-Z \\ d] +' ......... –

+0

@cxw Ich habe meine Frage bearbeitet. Schauen Sie bitte. – Maverick

Antwort

3

Sie wollen Kapitelle und Zahlen - das heißt [A-Z0-9]+. Der einfachste Ansatz ist alle Vorder- und Hinter nicht passenden Zeichen zu entfernen - [^A-Z0-9]+ dh, spaltete dann auf nicht passenden Zeichen, wie folgt aus:

String myarray[] = input.replaceAll("^[^A-Z0-9]+|[^A-Z0-9]+$", "").split("[^A-Z0-9]+"); 

BTW geposteten Code würde [route, D, C] produzieren, nicht [D, C]

0

Versuchen mit den folgenden:

String myarray[] = two.split("\\s*(->|:)\\s*"); 

Sie haben separate Logik schreiben nicht-passende cha zu handhaben racters mögen in diesem Fall "Route".

Verwandte Themen