2016-05-26 24 views
1

Ich habe eine Menge Schwierigkeiten mit einer sehr einfachen Aufgabe in Java erlebt. Erstens würde Ich mag ein String Array aufteilen, jeden Buchstaben allein und mit einem regex (dies wichtig ist, weil ich es für komplexere regex nach diesem Upgrade wird, aber ich muss zunächst diese einfache laufen)Java Split RegEx funktioniert nicht

Stringbase = "artetbewrewcwewfd";  
    String arr2[] = base.split("\\."); 

Warum kann ich das nicht so machen?

String base = "artetbewrewcwewfd";  
    String arr2[] = base.split("\\[abcdefghijklmnopqrstuvwxyz]"); 

noch nicht einmal so.

https://ideone.com/cCYVSc

https://ideone.com/DYnh3m

vielen Dank für Ihre Zeit

+0

Also versuchen Sie einen String ohne Punkt auf einen Punkt zu teilen ... und was erwarten Sie dort? Ich meine, du bist deiner Regex explizit entkommen, also weißt du wohl, was du tust? – Tom

+0

Versuchen Sie ['String arr2 [] =" artetbew42rewcwewfd ".split (" (?! ^) (? =.) ");'] (Https://ideone.com/Yv87rF) –

+0

Punkt ist ein Symbol für ein beliebiges Zeichen in Regex, soweit ich weiß? –

Antwort

1

Beachten Sie, dass \\. (ein entflohener Punkt) in der ersten regulären Ausdruck entspricht einem wörtlichen Punkt-Zeichen (und die Zeichenfolge hat keine Punkte, so dass, Die split gibt die ganze Zeichenfolge zurück).

Das zweite "\\[abcdefghijklmnopqrstuvwxyz]" Muster entspricht einer Sequenz von [abcdefghijklmnopqrstuvwxyz], weil man durch die Flucht der ersten [ (und ein entflohener [ passt eine wörtliche [ damit die Schließung ] auch als behandelt wird, um die Zeichenklasse Konstrukt ruiniert wörtliches Symbol, kein spezielles Konstruktzeichen).

kurz vor Hier spalten Um jedes Zeichen in einer Zeichenfolge können Sie

String arr2[] = "artetbew42rewcwewfd".split("(?!^)(?=.)"); 
System.out.println(Arrays.toString(arr2)); 
// => [a, r, t, e, t, b, e, w, 4, 2, r, e, w, c, w, e, w, f, d] 

Siehe IDEONE demo

verwenden, schlägt (?!^) das Spiel ganz am Anfang der Zeichenfolge (um nicht um ein leeres Leerzeichen als erstes Element zurückzugeben) und (?=.) ist ein positiver Lookahead, der vor jedem Zeichen, aber einem Zeilenumbruch steht.

Wenn Sie vor einem Zeilenumbruch auch übereinstimmen möchten, verwenden Sie Pattern.DOTALL Flag, oder fügen Sie (?s) vor dem Muster hinzu.