Проблема не в разделителях, а в распознавании токенов. Ваши токены:
<page a>
The
cat
ran
over
the
Кодирование символов «<» в любом месте набора разделителей в значительной степени гарантирует, что они <em>не будут находиться в возвращаемых токенах. Если вы знаете, что <page a>
находится где-то в начале строки (и я понимаю, что это может быть неверным предположением), вы можете сделать что-то вроде этого:
Scanner s = new Scanner(...);
s.useDelimiter("[^\\w]");
// Find an angle bracket token, if one is next.
String token = s.findInLine("<[^.]*>");
if (token != null)
// process angle bracket token
token = s.next(); // get next delimited token
...
Очевидно, это быстрый взлом (хотя я и проверил его). Но я думаю, вы могли бы легко его расширить.