в Java, если у меня есть строка с этим форматом:
( string1 , string2 ) ( string2 ) ( string4 , string5 , string6 ) [s2]
Как я могу разбить строку, чтобы получить массив строк как это?
string1 , string2 string2 string4 , string5 , string6
Попробуйте это:
String test = "( string1 , string2 ) ( string2 ) ( string4 , string5 , string6 ) [s2]"; String[] splits = test.split("\\(\\s*|\\)[^\\(]*\\(?\\s*"); for (String split : splits) { System.out.println(split); }
Вы можете использовать совпадение:
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
Возможно, вы захотите использовать 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);