检查有效的用户输入字符串,并使用java中的scanner读取带有空格的字符串



我正在获取字符串变量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(); 
  • 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);

sc.next()从当前扫描程序"sc"中查找并返回下一个完整的令牌。

扫描仪有一个方法nextLine(),它使扫描仪前进到当前行并返回跳过的输入。在您的情况下,您需要使用nextLine(),这样您就可以通过间隔。

您可以使用简单的代码:

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

最新更新