2016-07-25 2 views
0

Ich habe eine Zeichenkette, die mehrere Gruppen von Zeichenketten enthält, jede Gruppe ist in Klammern {} eingeschlossen. Jede Gruppe wird durch ein Komma getrennt und jede Zeichenfolge mit einer Gruppe wird ebenfalls durch ein Komma getrennt. Das Format ist so etwas wie:Wie man eine Zeichenkette, die mehrere Gruppen von Zeichenketten enthält, in Zeichensätze in Java zerlegt

{abc, def}, {006, xy, 036}, {......} 

Was soll ich tun, um jede Gruppe in eine HashSet zu setzen und eine andere HashSet enthält alle jene Sätze, so etwas wie:

set 1: abc 
      def 

    set 2: 006 
      xy 
      036 
    ..... 
    set n: 

    allSets --> set1, set2, set...., setn. 

Was kann ich mir vorstellen Jetzt wird jedes Zeichen in der ursprünglichen Zeichenfolge wiederholt und zu den Mengen hinzugefügt. Aber ich frage mich, ob es andere Möglichkeiten gibt, oder ob Java über einige APIs verfügt, die dies erreichen können. Danke vielmals!

+0

Sie suchen nach einem einfachen Parser. Aber es ist wahrscheinlich einfacher, dies auf die übliche Weise zu hacken, als einen zu schreiben. – mszymborski

+0

@mszymborski Könntest du bitte klarstellen, dass du den üblichen Weg gehackt hast, um einen zu schreiben? Wie ist der übliche Weg? – jlp

+0

Sie können einen ordentlichen Stream schreiben, um ihn zu schneiden, zu trimmen, alle unnötigen Bits zu entfernen. Eine Menge Arbeit und ein Schmerz in den Arsch zu später ändern, aber immer noch einfacher als das Lernen von Antlr. – mszymborski

Antwort

2
String str="{abc, def}, {006, xy, 036}"; 
    Pattern p = Pattern.compile("\\{(.*?)\\}"); 
    Matcher m = p.matcher(str); 
    while (m.find()) { 
     System.out.println(m.group(1)); 
    } 

Es wird Ihnen Werte wie

abc, def
006, xy, 036

Jetzt können Sie voran gehen und fügen Sie sie entsprechend in die String-Array oder Karte Es ist ein Hack herum.

+0

Sie können Lazy Regexes anstelle der Verwendung der '[^}] Thing – mszymborski

+0

wo Sie wird das verwenden? –

+1

'*' passt normalerweise so viele Tokens wie möglich an - wenn Sie '*?' verwenden, wird es so wenig Tokens wie möglich entsprechen (aber findet immer noch eine Übereinstimmung, wenn es eine gibt) - zum Beispiel '\\ { (. *?) \\} ' – mszymborski

Verwandte Themen