Java разделить строку - PullRequest
       34

Java разделить строку

3 голосов
/ 09 ноября 2011

в Java, если у меня есть строка с этим форматом:

( string1 , string2 ) ( string2 ) ( string4 , string5 , string6 ) [s2]

Как я могу разбить строку, чтобы получить массив строк как это?

string1 , string2
string2
string4 , string5 , string6

Ответы [ 3 ]

6 голосов
/ 09 ноября 2011

Попробуйте это:

    String test = "( string1 , string2 ) ( string2 ) ( string4 , string5 , string6 ) [s2]";

    String[] splits = test.split("\\(\\s*|\\)[^\\(]*\\(?\\s*");

    for (String split : splits) {
        System.out.println(split);
    }
3 голосов
/ 09 ноября 2011

Вы можете использовать совпадение:

List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile("\\((.*?)\\)");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
    matchList.add(regexMatcher.group(1));
} 

Сопоставляет что-либо между () и сохраняет его в обратной ссылке 1.

Объяснение:

 "\\(" +      // Match the character “(” literally
"(" +       // Match the regular expression below and capture its match into backreference number 1
   "." +       // Match any single character that is not a line break character
      "*?" +      // Between zero and unlimited times, as few times as possible, expanding as needed (lazy)
")" +
"\\)"        // Match the character “)” literally
0 голосов
/ 09 ноября 2011

Возможно, вы захотите использовать split на /\(.+?\)/ - что-то вроде этого в Java:

Pattern p = Pattern.compile("\\(.+?\\)");
Matcher m = p.matcher(myString);
ArrayList<String> ar = new ArrayList<String>();
while (m.find()) {
    ar.add(m.group());
}
String[] result = new String[ar.size()];
result = ar.toArray(result);
...