2016-04-19 3 views
1

ich habe:Java regulären Ausdruck für String umgeben von „“

String s=" \"son of god\"\"cried out\" a good day and ok "; 

Dies wird auf dem Bildschirm angezeigt, wie:

"son of god""cried out" a good day and ok 

Pattern phrasePattern=Pattern.compile("(\".*?\")"); 
Matcher m=phrasePattern.matcher(s); 

möchte ich alle Sätze, umgeben bekommen „“ und sie hinzufügen zu einem ArrayList<String>. Es könnte mehr als 2 solcher Sätze haben. Wie kann ich jede Phrase bekommen und in meine Arraylist legen?

+3

Wie gehst du mit der Saite um? Dann sagte John: "Ich habe mit Fred gesprochen und er sagte 'Ich mag es nicht'"? –

+0

@JimGarrison es wird eine noch bessere Frage sein, wenn Sie ein Paar doppelte Anführungszeichen in diesem Paar von einfachen Anführungszeichen haben. – HuStmpHrrr

Antwort

1

Mit Ihrer Matcher sind Sie 90% des Weg dorthin. Sie brauchen nur die #find Methode.

ArrayList<String> list = new ArrayList<>(); 
while(m.find()) { 
    list.add(m.group()); 
} 
1

Ein alternativer Ansatz, und ich kann es nur vorschlagen, weil Sie nicht explizit sagen Sie Regex Matching verwenden müssen, ist auf " aufzuspalten. Jedes andere Stück ist dein Interesse.

public static void main(String[] args) { 
    String[] testCases = new String[] { 
      " \"son of god\"\"cried out\" a good day and ok ", 
      "\"starts with a quote\" and then \"forgot the end quote", 
    }; 
    for (String testCase : testCases) { 
     System.out.println("Input: " + testCase); 
     String[] pieces = testCase.split("\""); 
     System.out.println("Split into : " + pieces.length + " pieces"); 
     for (int i = 0; i < pieces.length; i++) { 
      if (i%2 == 1) { 
       System.out.println(pieces[i]); 
      } 
     } 
     System.out.println(); 
    } 
} 

Ergebnisse:

Input: "son of god""cried out" a good day and ok 
Split into : 5 pieces 
son of god 
cried out 

Input: "starts with a quote" and then "forgot the end quote 
Split into : 4 pieces 
starts with a quote 
forgot the end quote 

Wenn Sie sicherstellen wollen, dass es eine gerade Anzahl von doppelten Anführungszeichen ist sicher, dass das geteilte Ergebnis eine ungerade Zählung hat.