Вот пример парсера, который реализует ваши потребности:
public static List<String> splitter(String input) {
int nestingLevel=0;
StringBuilder currentToken=new StringBuilder();
List<String> result = new ArrayList<>();
for (char c: input.toCharArray()) {
if (nestingLevel==0 && c == '/') { // the character is a separator !
result.add(currentToken.toString());
currentToken=new StringBuilder();
} else {
if (c == '(') { nestingLevel++; }
else if (c == ')' && nestingLevel > 0) { nestingLevel--; }
currentToken.append(c);
}
}
result.add(currentToken.toString());
return result;
}
Вы можете попробовать его здесь .
Обратите внимание, что это не приводит кожидаемый результат, который вы опубликовали, но я не уверен, какой алгоритм вы использовали, чтобы получить такой результат.В частности, я убедился, что нет «отрицательного уровня вложенности», поэтому для начала /
в "Mango 003 )/( ASDJ"
рассматривается вне скобок и анализируется как разделитель.
В любом случае, я уверен, что выЯ могу изменить мой ответ гораздо проще, чем вы, например, в виде регулярных выражений, и весь смысл моего ответа состоит в том, чтобы показать, что написание синтаксического анализатора для решения таких проблем зачастую более реалистично, чем попытка создать регулярное выражение.