Здесь обсуждается метод next и метод nextLine в классе сканера Java. Что такое методы next() и nextLine()?
Проблема возникает:
Давайте сначала посмотрим на следующий код: Простой консольный ввод и вывод:
просмотреть обычную копию в буфер обмена, распечатать?
пакет cn.nileader.app.vi;
импортировать java.util.Scanner;
тест публичного класса {
public static void main(String[] args) выдает исключение {
Сканер cin = новый сканер(System.in);
Строка ni = cin.nextLine();
System.out.print("Используйте метод next() класса Scanner, чтобы получить только что введенную строку: "+ni+" и длину "+ni.length());
ни = cin.nextLine();
System.out.print("Используйте метод next() класса Scanner, чтобы получить только что введенную строку: "+ni+" и длину "+ni.length());
}
}
пакет cn.nileader.app.vi;
импортировать java.util.Scanner;
тест публичного класса {
public static void main(String[] args) выдает исключение {
Сканер cin = новый сканер(System.in);
Строка ni = cin.nextLine();
System.out.print("Используйте метод next() класса Scanner, чтобы получить только что введенную строку: "+ni+" и длину "+ni.length());
ни = cin.nextLine();
System.out.print("Используйте метод next() класса Scanner, чтобы получить только что введенную строку: "+ni+" и длину "+ni.length());
}
}
Посмотрите еще раз на следующий код:
просмотреть обычную копию в буфер обмена, распечатать?
пакет cn.nileader.app.vi;
импортировать java.util.Scanner;
тест публичного класса {
public static void main(String[] args) выдает исключение {
Сканер cin = новый сканер(System.in);
Строка ni = cin.next();
System.out.print("Используйте метод next() класса Scanner, чтобы получить только что введенную строку: "+ni+" и длину "+ni.length());
ни = cin.next();
System.out.print("Используйте метод next() класса Scanner, чтобы получить только что введенную строку: "+ni+" и длину "+ni.length());
}
}
пакет cn.nileader.app.vi;
импортировать java.util.Scanner;
тест публичного класса {
public static void main(String[] args) выдает исключение {
Сканер cin = новый сканер(System.in);
Строка ni = cin.next();
System.out.print("Используйте метод next() класса Scanner, чтобы получить только что введенную строку: "+ni+" и длину "+ni.length());
ни = cin.next();
System.out.print("Используйте метод next() класса Scanner, чтобы получить только что введенную строку: "+ni+" и длину "+ni.length());
}
}
Все приведенные выше фрагменты кода правильны и скучны.
Чудесное дело приближается...
Запустите следующий код:
просмотреть обычную копию в буфер обмена, распечатать?
пакет cn.nileader.app.vi;
импортировать java.util.Scanner;
тест публичного класса {
public static void main(String[] args) выдает исключение {
Сканер cin = новый сканер(System.in);
Строка ni = cin.next();
System.out.println("Использование метода next() класса Scanner для получения только что введенной строки: "+ni+" и длина "+ni.length());
ни = cin.nextLine();
System.out.print("Используйте метод next() класса Scanner, чтобы получить только что введенную строку: "+ni+" и длину "+ni.length());
}
}
пакет cn.nileader.app.vi;
импортировать java.util.Scanner;
тест публичного класса {
public static void main(String[] args) выдает исключение {
Сканер cin = новый сканер(System.in);
Строка ni = cin.next();
System.out.println("Использование метода next() класса Scanner для получения только что введенной строки: "+ni+" и длина "+ni.length());
ни = cin.nextLine();
System.out.print("Используйте метод next() класса Scanner, чтобы получить только что введенную строку: "+ni+" и длину "+ni.length());
}
}
Результаты бега следующие:
лавочник
Используйте метод next() класса Scanner, чтобы получить только что введенную строку: ni shopkeeper, длина равна 4.
Используйте метод next() класса Scanner, чтобы получить только что введенную строку: длина равна 0.
Все кончено, когда методы Java Scanner next и nextLine используются вместе,
У вас нет возможности ввести вторую строку! ! !
Анализ проблемы:
Очевидная разница между методом next и методом nextLine заключается в том, что первый считывает «сегмент» символов, а второй — строку строк.
Проще говоря, причина описанного выше явления в основном вызвана безответственностью метода next().
Как работает метод next(): (поверхностно говоря)
Сканируйте со строки, пока не встретите определенный идентификатор: пробел или символ новой строки (n), и не получите символ (строку) перед ним.
Посмотрите здесь, первый метод next() читает «ni shopkeeper», но не читает «n» и не отвечает за разрывы строк, а затем выдает «n» в nextLine() для обработки.
Как вы знаете, функция nextLine() принадлежит к типу «видящих деньги», который принимает «n», когда видит его, а затем сканирует содержимое перед n, которое представляет собой пустую строку. Потом что-то пошло не так.
Решение проблемы:
просмотреть обычную копию в буфер обмена, распечатать?
пакет cn.nileader.app.vi;
импортировать java.util.Scanner;
тест публичного класса {
public static void main(String[] args) выдает исключение {
Сканер cin = новый сканер(System.in);
Строка ni = cin.next();
System.out.println("Использование метода next() класса Scanner для получения только что введенной строки: "+ni+" и длина "+ni.length());
while( (ni = cin.nextLine()).equals("") ){}
System.out.print("Используйте метод next() класса Scanner, чтобы получить только что введенную строку: "+ni+" и длину "+ni.length());
}
}
пакет cn.nileader.app.vi;
импортировать java.util.Scanner;
тест публичного класса {
public static void main(String[] args) выдает исключение {
Сканер cin = новый сканер(System.in);
Строка ni = cin.next();
System.out.println("Использование метода next() класса Scanner для получения только что введенной строки: "+ni+" и длина "+ni.length());
while( (ni = cin.nextLine()).equals("") ){}
System.out.print("Используйте метод next() класса Scanner, чтобы получить только что введенную строку: "+ni+" и длину "+ni.length());
}
}
Результаты запуска:
лавочник
Используйте метод next() класса Scanner, чтобы получить только что введенную строку: ni shopkeeper, длина равна 4.
гений
Используйте метод next() класса Scanner, чтобы получить только что введенную строку: Он гений, а длина равна 4.
Поместите исходный второй cin.nextLine()
Измените на while( (ni = cin.nextLine()).equals("") ){}
Таким образом можно устранить влияние «n» в предыдущей строке.