Java - извлечение подстрок программно - PullRequest
0 голосов
/ 27 июня 2019

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

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1

Я внимательно изучил свой код и не вижу, где именно я ошибся в диапазоне индекса.Я пытался найти похожие вопросы здесь, но, хотя я видел подобные проблемы, они связаны с C ++ или Perl, а не с Java.

package nameSubstring;

import java.util.Scanner;

public class NameSubstring {

    public static void main(String[] args) {

        /*
         * This is a program that accepts a user’s full name as a string (e.g. Margaret Thatcher) and displays to the user his/her first name, last name and initials in the following format:
           Your first name is Margaret and your last name is Thatcher and your initials are MT.
             */

        System.out.println("This program will take your full name and display your first name, last name, and initials.");
        Scanner scanner = new Scanner(System.in); 
        String firstName, lastName, firstNameInitial, lastNameInitial; 
        System.out.println("Please enter your full name, e.g. Jane Smith:");
        String fullName = scanner.next();
        int nameSpace = fullName.indexOf(' '); 
        firstName = fullName.substring(0, nameSpace); 
        lastName = fullName.substring(nameSpace)+1; 
        firstNameInitial = firstName.substring(0, 1);
        lastNameInitial = lastName.substring(0, 1);
        System.out.println("Your first name is " + firstName + ", " + "your last name is " + lastName + ", " + "and your initials are " + firstNameInitial + lastNameInitial + ".");

    }

}

1 Ответ

2 голосов
/ 27 июня 2019

Вместо next() используйте nextLine():

String fullName = scanner.nextLine();

и исправьте ошибку с помощью +1, которая должна быть в скобках:

lastName = fullName.substring(nameSpace+1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...