Ошибки Java next () и nextLine

Я пытаюсь реализовать телефонную книгу на Java с помощью ArrayLists, но всякий раз, когда я пытаюсь получить информацию о пользователе с помощью next () или nextLine(), я получаю ошибки. Это метод, который собирает и сохраняет вводимые пользователем данные.

public void saveContact() {
        String[] userInput = new String[3];
        String[] input = {"name", "age", "phone number"};
        String[] pattern = {".", "\\d", ".+\\d+"};
        for(int i=0; i < 3; i++) {
            try (Scanner sc = new Scanner(System.in)) {
                String name = "";
                while(!verifyUserInput(name, pattern[i])) {
                    System.out.printf("Enter contact's %s\n", input[i]);
                    name = sc.nextLine();
                userInput[i] = name;
                }
            }
        }
        phoneArrayList.add(userInput);
    }

Когда я использую nextLine(), я получаю

Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.base/java.util.Scanner.nextLine(Scanner.java:1651)
    at PhoneDirectory.saveContact(PhoneDirectory.java:42)
    at MainClass.main(MainClass.java:19)

И когда я использую next (), я получаю

Exception in thread "main" java.util.NoSuchElementException
    at java.base/java.util.Scanner.throwFor(Scanner.java:937)
    at java.base/java.util.Scanner.next(Scanner.java:1478)
    at PhoneDirectory.saveContact(PhoneDirectory.java:42)
    at MainClass.main(MainClass.java:19)

Я пробовал использовать hasNext() и hasNextLine(), как это, но это просто приводит к бесконечному циклу. Я понятия не имею, что я должен использовать, чтобы вводить данные пользователя без ошибок.

if(sc.hasNext()) {
    name = sc.next();
}

А это метод verifyUserInput

public boolean verifyUserInput(String input, String patt) {
        Pattern pattern = Pattern.compile(patt);
        Matcher m = pattern.matcher(input);
        return m.find();
    }

1 ответ


public class Test {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        String[] userInput = new String[3];
        String[] input = {"name", "age", "phone number"};
        String[] pattern = {".", "\\d", ".+\\d+"};

        boolean isAllInputValid = true;
        for (int i = 0; i < 3; i++) {
            System.out.printf("Enter contact's %s\n", input[i]);
            if (scan.hasNextLine()) {
                String inputStr = scan.nextLine();
                if (!verifyUserInput(inputStr, pattern[i])) {
                    isAllInputValid = false;
                    break;
                }
                userInput[i] = inputStr;
                System.out.println("contact's  " + input[i] + " is " + inputStr);
            }
        }
        if (isAllInputValid) {
            System.out.println("userInput = " + Arrays.toString(userInput));
        }

    }

    public static boolean verifyUserInput(String input, String patt) {
        Pattern pattern = Pattern.compile(patt);
        Matcher m = pattern.matcher(input);
        return m.find();
    }
}

Другие вопросы по тегам