![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| turtles |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 17.2.2011 Репутация: нет Всего: нет |
Объясните В чем различие для ввода данных в консоли Scanner, Console и BufferedReader bReader = new BufferedReader (new InputStreamReader(System.in)); и Какой лучше из них использовать!!!
|
|||
|
||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Scanner работает медленнее всех, но самый удобный - сразу позволяет получать следущий токен. Для полученния более-менее похожей функциональности при большей скорости можно использовать класс StreamTokenizer.
Удобно использовать почти всегда. BufferedReader - просто поток с буффером, т.е. данные загружаются в ОЗУ в некоторый буффер и запрашиваются оттуда, без постоянных обращений к источнику потока. Можно использовать, когда из файла постоянно данные будут считываться по строкам. Если в строке есть несколько токенов, то каждый из них придется вычленять вручную с помощью String.split или StringTokenizer. Консоль не использовал, вроде бы это просто обертка над System.in и System.out. Но точно не уверен. Это сообщение отредактировал(а) Stolzen - 12.4.2011, 09:28 |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Console это интерфейс для работы с консолью, это не обертка над stdin/stdout. У него есть пара уникальных особенностей, типа возможности вводя паролей и правильной работы с кодировками консоли. Плюс Console недоступна если приложение запущено без консоли.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| aleksandy |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 260 Регистрация: 17.12.2006 Репутация: 4 Всего: 5 |
Про удобство это, надеюсь, шутка?
Когда завершится программа? |
|||
|
||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Нет, вполне не шутка
Впрочем, на вкус и цвет фломастеры разные |
|||
|
||||
| aleksandy |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 260 Регистрация: 17.12.2006 Репутация: 4 Всего: 5 |
1. Все-таки приведенный тобой алгоритм немного не так работает, как мой: метки выводятся вместе с введенными данными, а не перед тем, т.е. в консоли вместо
2. Я не зря использовал именно nextLine(), т.к. иначе получаем исключение
3. Вот такой код
Неожиданно, правда? Про Scanner#useDelimeter(String) и как с его помощью можно исправить описанное мною поведение я в курсе. Но, как говорится, факт налицо. Добавлено через 3 минуты и 47 секунд Я ни в коем случае не хочу сказать, что Scanner - это плохо. Я просто никак не могу понять почему, если он так коряво работает с консолью, во многх примерах его используют именно для нее. Вот пропарсить файл с его помощью - это да, его можно сделать быстро. А вот с консолью лучше работать через Console или BufferedReader. |
||||||||||
|
|||||||||||
| priam220 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 4.6.2010 Репутация: 7 Всего: 8 |
aleksandy, интересный пример, а с чем связано такое странное поведение?..
|
|||
|
||||
| aleksandy |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 260 Регистрация: 17.12.2006 Репутация: 4 Всего: 5 |
Насколько я помню это из-за того, что в винде разделителями являются \r\n.
|
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Не вижу ничего удивительного. sc.next() читает "y", и остается пустая строка. Пустая строка тоже подходит под шаблон строки.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| aleksandy |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 260 Регистрация: 17.12.2006 Репутация: 4 Всего: 5 |
Подходить-то подходит, но, по-моему, было бы логичней сделать разделителем именно System.getProperty("line.separator"), потому как столкнувшись с этой ситуацией я, честно говоря, был озадачен. Чтение исходников, как всегда, помогло разобраться в проблеме и найти пути её решения, но неприятный осадок остался. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |