Можно использовать lookbehinds / lookaheads, чтобы явно определить, какие разделители нельзя использовать.
Например, этот сканер использует пробелы в качестве разделителя, но не нуждается в них между цифрами и словами:
new Scanner("1A.23 4 BC-5")
.useDelimiter("\\s+|(?<=\\d)(?=[A-Z])|(?<=[A-Z])(?=[-+.\\d])");
Производит:
1
A
.23
4
BC
-5
Регулярное выражение состоит из трех чередований:
\s+
последовательные пробелы являются разделителями.
(?<=\d)(?=[A-Z])
пустая строка между цифрой и буквой является разделителем.
(?<=[A-Z])(?=[-+.\d])
пустая строка между буквой и '-', '+', '.' или же
цифра - это разделитель.
(Примечание: \w
здесь нельзя использовать, так как оно соответствует цифрам.)