2012-04-13 11 views
2

Gegeben _<A_>_<B_>_<Z_>, ich möchte A, B, C in einem Array extrahieren.Java - Split durch Trennzeichen

Grundsätzlich ist _< das Starttrennzeichen und _> ist das Endtrennzeichen.

+2

Was haben Sie bisher versucht? Bitte versuchen Sie, sich selbst zu implementieren, und stellen Sie dann spezifische Fragen zu Problemen, die Sie bei der Implementierung haben. – Deco

+0

'.replaceFirst (" (? S)^_ <(.*)_> $ "," $ 1 "). Split (" _> _ <")' –

+0

@Deco, Du hast Recht .. Ich hätte es auflegen sollen ... Aber was? Ich versuchte, war sehr grundlegend, dh Sequentiell nach einem Trennzeichen suchen und ein Array auffüllen. – 500865

Antwort

3

so einfach ist - ausgeschnitten zuerst öffnen und schließen letzte, und teilen Sie es dann durch die close-Open

string.replaceFirst("^_<(.*)_>$", "$1").split("_>_<"); 
+0

Nein, nicht aufteilen. Dafür sind Capture-Gruppen da. – nes1983

+0

+1 Dies ist eine absolut gültige, funktionierende Lösung. (Und es gibt das resultierende Array direkt zurück. Nicht wie meine Lösung, wo das Array erstellt werden muss.) – stema

-2

Sie extrahieren sie mit capture groups.

+0

und wie erhalten Sie Array von Gruppen :)? von _ _ _ _ _ SergeS

+0

@SergeS Ist das eine Trickfrage? Du machst nur eins. Liste ret = neue ArrayList (); für (int i = 1; i <= match.groupCount(); i ++) { ret.add (match.group (i)); } Rückkehr ret; – nes1983

+0

ok, also zeige einen funktionierenden Beispielcode, weil ich es nicht über Gruppen bearbeiten kann – SergeS

-2

Spaltung von _< 2 Elemente zu bekommen, die 2. nehmen und teilen sie durch _> 2 Elemente zu bekommen, nehmen Sie die 1. und spaltete es durch _>_< A zu erhalten, B, C

+0

Nein, nicht aufteilen. Dafür sind Capture-Gruppen da. – nes1983

5

Sie lookaround assertions verwenden können, nur den Inhalt der Tags zu entsprechen.

String text = "_<A_>_<B_>_<Z_>"; 

List<String> Result = new ArrayList<String>(); 

Pattern p = Pattern 
    .compile("(?<=_<)" + // Lookbehind assertion to ensure the opening tag before 
     ".*?" +   // Match a less as possible till the lookahead is true 
     "(?=_>)"   // Lookahead assertion to ensure the closing tag ahead 
     ); 
Matcher m = p.matcher(text); 
while(m.find()){ 
    Result.add(m.group(0)); 
} 
Verwandte Themen