Используйте флаг returnDelims
и проверьте два последующих вхождения разделителя:
String str = "ABC|DEF||FGHT";
String delim = "|";
StringTokenizer tok = new StringTokenizer(str, delim, true);
boolean expectDelim = false;
while (tok.hasMoreTokens()) {
String token = tok.nextToken();
if (delim.equals(token)) {
if (expectDelim) {
expectDelim = false;
continue;
} else {
// unexpected delim means empty token
token = null;
}
}
System.out.println(token);
expectDelim = true;
}
это печатает
ABC
DEF
null
FGHT
API не симпатичен и поэтому считается устаревшим (то есть "почти устаревшим"). Используйте его только в тех случаях, когда сопоставление с шаблоном слишком дорого (что должно иметь место только в случае очень длинных строк) или когда API ожидает перечисление.
В случае, если вы переключаетесь на String.split(String)
, обязательно указывайте разделитель. Либо вручную ("\\|"
), либо автоматически, используя string.split(Pattern.quote(delim));