Разделение входных данных сканера на строки - PullRequest
0 голосов
/ 17 ноября 2018

Я давно искал ответ на этот вопрос, но по какой-то причине ни один из них, похоже, не работает.

public static void main(String[] args) {

    Scanner scanner = new Scanner(System.in);

    System.out.println("Please enter full name (last, first)");
    String[] personalInfo = scanner.next().split(", ");
    String firstName = personalInfo[1];
    String lastName = personalInfo[0];

    System.out.println("Your info: " +  firstName + " " + lastName);

Вот мой код. Я в основном пытаюсь получить личную информацию, которая будет именем и фамилией. Я хочу разделить имя и фамилию на две разные строки, но всякий раз, когда я пытаюсь напечатать это, я получаю сообщение об ошибке:

Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: индекс 1> выходит за пределы длины 1 в Fines.main (Fines.java:11)

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

Пожалуйста, помогите мне - заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 17 ноября 2018

Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: индекс 1> выходит за пределы длины 1 в Fines.main (Fines.java:11)

в качестве размераpersonalInfo равно 1, а не 2.

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

String[] personalInfo = scanner.next().split(", "); должно быть

String[] personalInfo = scanner.nextLine().split(", ");

Возможно, вы захотите прочитать это В чем разница между методами next () и nextLine () класса Scanner?

0 голосов
/ 17 ноября 2018

То, что вы хотите, это scanner.nextLine () для чтения со стандартного ввода до конца строки.Тогда разделение будет работать, как вы ожидали.

Scanner scanner = new Scanner(System.in);

System.out.println("Please enter full name (last, first)");
String[] personalInfo = scanner.nextLine().split(", ");
String firstName = personalInfo[1];
String lastName = personalInfo[0];

System.out.println("Your info: " +  firstName + " " + lastName);
0 голосов
/ 17 ноября 2018
try (Scanner scan = new Scanner(System.in)) {
    System.out.println("Please enter full name (last, first)");
    String firstName = scan.next();
    String lastName = scan.next();
    System.out.println("Your info: " + firstName + ' ' + lastName);
}

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

...