Ошибки 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();
}
}