Сканер, в отличие от Matcher, имеет встроенную токенизацию строки, разделителем по умолчанию является пробел. Таким образом, ваш «привет мир» становится токенизированным в «привет» «мир» до начала матча. Было бы совпадение, если вы изменили разделитель перед сканированием на что-то, что не находится в строке, например ::
Scanner scanner = new Scanner("hello world");
scanner.useDelimiter(":");
System.out.println(scanner.next("hello\\s*world"));
но, похоже, действительно для вашего случая вы должны просто использовать Matcher
.
Это пример использования сканера «по назначению»:
Scanner scanner = new Scanner("hello,world,goodnight,moon");
scanner.useDelimiter(",");
while (scanner.hasNext()) {
System.out.println(scanner.next("\\w*"));
}
вывод будет
hello
world
goodnight
moon