我正在获取字符串变量street的用户输入,并尝试检查它是否只包含字符串而不包含特殊字符。然后我将它分配给字符串变量" street"。但是当用户输入时,例如" La Jolla"它只考虑" La"并且忽略" Jolla"。我应该如何修改代码,以便检查有效的输入字符串,并考虑空间并为街道变量分配" La Jolla"如果街道名称只是"蒙特克莱尔"没有更多的话
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();
答案 0 :(得分:0)
sc.next()查找并返回当前扫描程序中的下一个完整标记'。
扫描仪有一个方法nextLine(),它使扫描程序超过当前行并返回跳过的输入。 你需要在你的情况下使用nextLine(),这样你就可以超过这段时间。
答案 1 :(得分:0)
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 :(得分:0)
你可以用简单的代码来做到这一点:
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