Вопрос-ответ

What's the difference between next() and nextLine() methods from Scanner class?

В чем разница между методами next() и nextLine() из класса Scanner?

В чем основное различие между next() и nextLine()?
Моя основная цель - прочитать весь текст, используя Scanner который может быть "подключен" к любому источнику (файлу, например).

Какой из них я должен выбрать и почему?

Переведено автоматически
Ответ 1

Я всегда предпочитаю считывать входные данные с помощью nextLine(), а затем анализировать строку.

Использование next() вернет только то, что стоит перед разделителем (по умолчанию используется пробел). nextLine() автоматически перемещает scanner вниз после возврата текущей строки.

Полезным инструментом для синтаксического анализа данных из nextLine() было бы str.split("\\s+").

String data = scanner.nextLine();
String[] pieces = data.split("\\s+");
// Parse the pieces

Для получения дополнительной информации о классе Scanner или классе String обратитесь к следующим ссылкам.

Сканер: http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

Строка: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

Ответ 2

next() может считывать входные данные только до пробела. Он не может прочитать два слова, разделенные пробелом. Кроме того, next() помещает курсор в ту же строку после считывания входных данных.

nextLine() считывает входные данные, включая пробелы между словами (то есть считывает до конца строки \n). Как только входные данные прочитаны, nextLine() помещает курсор в следующую строку.

Для чтения всей строки вы можете использовать nextLine().

Ответ 3

Из JavaDoc:



  • A Scanner разбивает входные данные на токены, используя шаблон разделителя, который по умолчанию соответствует пробелу.

  • next(): Находит и возвращает следующий полный токен из этого сканера.

  • nextLine(): Продвигает этот сканер дальше текущей строки и возвращает пропущенный ввод.


Итак, в случае "small example<eol>text" next() должно возвращаться "small" и nextLine() должно возвращаться "small example"

Ответ 4

Ключевым моментом является определение того, где метод остановится и где будет находиться курсор после вызова методов.

Все методы будут считывать информацию, которая не содержит пробелов между позицией курсора и следующими разделителями по умолчанию (пробел, табуляция, \n - создаются нажатием Enter). Курсор останавливается перед разделителями, за исключением nextLine(), который считывает информацию (включая пробелы, созданные разделителями) между позицией курсора и \n, а курсор останавливается после \n .


Для примера рассмотрим следующую иллюстрацию:

|23_24_25_26_27\n

| -> текущее положение курсора

_ -> пробел

stream -> Bold (информация, полученная вызывающим методом)

Посмотрите, что происходит при вызове этих методов:

nextInt()    

читать 23|_24_25_26_27\n

nextDouble()

читать 23_24|_25_26_27\n

next()

прочитайте 23_24_25|_26_27\n

nextLine()

читать 23_24_25_26_27\n|


После этого метод должен быть вызван в зависимости от ваших требований.

2023-07-11 07:30 java