我正在尝试读取输入字符串-如果它符合预定义的模式,则应将其返回。如果输入不正确,则将引发异常。

到目前为止,这就是我所拥有的。我的问题是,无论输入如何,它总是会引发异常。我在这里可能做错了什么?



public String readPostCode() throws InputMismatchException
{
    Scanner in = new Scanner(System.in);
    String postcode;
    System.out.println("Please enter a Postcode");
    postcode = in.next(this.pattern);
    return postcode;
}


当我在try / catch语句中使用以上方法时,始终会捕获InputMismatchException。

编辑:这是模式的定义:

public Pattern pattern = Pattern.compile(   "[a-zA-Z]" +
                                            "([0-9]|[a-zA-Z])" +
                                            "(|[0-9]|[0-9][0-9]|[a-zA-Z]|[0-9][a-zA-Z])" +
                                            " [0-9][a-zA-Z][a-zA-Z]");

最佳答案

注意:代码未经测试。

对于加拿大邮政编码(由于未定义区域设置)

使用:(^ [a-zA-Z] [0-9] [a-zA-Z] \ s?[0-9] [a-zA-Z] [0-9] $)


  接受的输入示例:A2B 3P7


public String readPostCode(){
        Scanner in = new Scanner(System.in);
        String postcode = scan.nextLine().toUpperCase();
        try {
           if(postcode.matches("^[A-Z][0-9][A-Z]\s?[0-9][A-Z][0-9]$"){
              return postcode;
            }
         } catch (InputMismatchException IME){
              System.out.println("Input does not match required format");
         }
    }

关于java - 使用扫描仪和图案始终会引发异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13434176/

10-10 17:06