Решал сегодня задачу level22.lesson09.task01. В условии нужно считать слова разделенные пробелом, состоящие из несколько строк. Смотря комментарии к этой задачи удивился, что люди считывают строки в основном через BufferedReader. При этом у них возникает куча проблем, строку нужно разделять на слова при помощи split() с переносом строки тоже возникают трудности. Подобные вопросы возникали у меня и на более ранних задачах. В связи с этим вопрос: почему у ДжаваРашевцев такая не любовь к Scanner`у? Это всеобщее заблуждение или я чего-то не знаю?
Ведь Scanner отлично справляется, если нам нужно считать не строку целиком, а именно слова разделенные пробелами и на разных строках. Не надо вставлять ни каких костылей в виде сплитов и думать о переносе строк.
KarmaHacker
30 уровень
Если Вы сравните две такие реализации:
1) используем BufferedReader
2) используем Scanner
то первая, естественно, всегда будет работать быстрее (хотя вторая компактнее).
Если мы перепишем Scanner на работу со строками:
3) используем Scanner со строками
то, чт
Scanner надо просто уметь пользоваться и сразу все станет компактно:
Но! Еще раз повторю свою заключительную мысль, здесь дело не в этом (BufferedReader или Scanner), а в том, как вы производите считывание. Чем меньше вы обращаетесь к файлу, тем быстрее будет работать ваш код и компактность здесь ни причем.
Я в BufferedReader считываю построчно, вы (в вашем примере) кусками по whiteSpaces, что значительно медленнее, так что выигрывает именно в этом случае 3-ий вариант (построчный Scanner).
P.S.
Вы меня немного смутили указанием .useDelimiter("\\s+"), всегда считал, что этот паттерн идет в Scanner по умолчанию, перепроверил, действительно, я был прав: "\\p{javaWhitespace}+"
Так что .useDelimiter("\\s+") в вашем примере излишне.
P.S. привел для примера первый попавшийся код. Суть в том что в Scanner можно задать разделитель изначально и получать уже преобразованную информацию. По-идее 2 и 3-й варианты вашего кода будут работать с одинаковой скоростью, так как в любом случае используется один буфер в 1024 байта.