Я не пытался расширить Tokenizer, но у меня есть хорошее (я думаю) решение с регулярным выражением:
\w+|\(\([\w\s]*\)\)
И метод, который разбивает строку по сопоставленным группам из reg ex, возвращающего массив. Пример кода:
class Regex_ComandLine {
public static void main(String[] args) {
String input = "term1 term2 term3 ((term4 term5)) term6"; //your input
String[] parsedInput = splitByMatchedGroups(input, "\\w+|\\(\\([\\w\\s]*\\)\\)");
for (String arg : parsedInput) {
System.out.println(arg);
}
}
static String[] splitByMatchedGroups(String string,
String patternString) {
List<String> matchList = new ArrayList<>();
Matcher regexMatcher = Pattern.compile(patternString).matcher(string);
while (regexMatcher.find()) {
matchList.add(regexMatcher.group());
}
return matchList.toArray(new String[0]);
}
}
Выход:
term1
term2
term3
((term4 term5))
term6
Надеюсь, это поможет вам.
Обратите внимание, что следующий код с обычным split()
:
String[] parsedInput = input.split("\\w+|\\(\\([\\w\\s]*\\)\\)");
не вернет вам ничего или не то, что вы хотите, потому что он проверяет только разделители.