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

时间:2016-05-02 14:08:44

标签: java string java.util.scanner

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

3 个答案:

答案 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