проверьте правильность вводимой пользователем строки и прочитайте строку с пробелами с помощью сканера на java

Я получаю пользовательский ввод для string variable street и пытаюсь проверить, содержит ли он только строки и никаких специальных символов. И затем я присваиваю его строковой переменной «street». Но когда пользователь вводит, например, «La Jolla», он рассматривает только» La «и игнорирует»Jolla». Как я должен изменить код, чтобы он проверял правильность входной строки, а также рассматривал пространство и назначал переменную улицы с «La Jolla», а также если имя улицы просто «Montclair» без каких-либо слов

System.out.println("Please enter the street name>> " );
while(!sc.hasNext("[a-zA-Z]+")){
System.out.println("Please enter a valid street name>> " );
sc.next();
}
String street = sc.nextLine(); 

3 ответа

  1. Южная Каролина.next () находит и возвращает следующий маркер завершения текущего сканера sc.

    Сканер имеет метод nextLine (), который продвигает сканер мимо текущей строки и возвращает пропущенный ввод.
    Вы должны использовать nextLine () в вашем случае , так что вы можете пройти интервал.

    • hasNext("[a-zA-Z]+") проверяет только наличие маркера, соответствующего выражению, а не наличие всей строки.

    • next() получает следующий маркер от сканера, а не следующую строку.

    • Нет реальной пользы для Scannerв этом сценарии.

    Это будет работать:

    BufferedReader r = new BufferedReader(new InputStreamReader(System.in));  // Optionally add a charset as 2nd parameter.
    String street;
    while (true) {
        System.out.println("Please enter a valid street name>> " );
        try {
            String line = r.readLine();
            // Accept a line with alphabetic characters delimited with space.
            if (line.matches("[A-Za-z ]+$")) {
                street = line;
                break;
            }
        } catch (IOException e) {
            // Handle broken input stream here.
            street = "";
            e.printStackTrace();
            break;
        }
    }
    System.out.println(street);
    
  2. Это можно сделать с помощью простого кода:

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Please enter the street name>> ");
        String street = sc.nextLine();
    
        while (!isAlphabet(street)) {
            System.out.println("Please enter a valid street name>> ");
            street = sc.nextLine();
        }
        System.out.println(street);
        sc.close();
    }
    
    public static boolean isAlphabet(String s) {
        return s.matches("[a-z A-Z]+");
    }
    

    Выход

    >     Please enter the street name>> 
    >     La Jolla%
    >     Please enter a valid street name>> 
    >     La Jolla
    >     La Jolla