Если вы попробуете
StringTokenizer st = new StringTokenizer("[[]{}[[]]()]","[]{}()");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
Он вернется пустым, поскольку он токенизирует строку, но больше ничего не останется после токенизации всех скобок. Если вы вместо этого попробуйте:
StringTokenizer st = new StringTokenizer("[[a]{b}[[c]d]()]","[]{}()");
Вы получите b b d - токенизированные значения.
Теперь, если вы хотите оставить скобки там, я рекомендую lookahead и regex lookback:
StringTokenizer st = new StringTokenizer(z,"[]{}()");
String regEx "(?<=[{}()\\[\\]])|(?=[{}()\\[\\]])";
System.out.println(Arrays.toString(z.split();
, который вернется:
[[, [, a, ], {, b, }, [, [, c, ], d, ], (, ), ]]