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