使用扫描程序和模式始终抛出异常

时间:2012-11-17 19:47:46

标签: java regex

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

这是我到目前为止所拥有的。我的问题是无论输入如何,它总是抛出一个异常。我在这里做错了什么?

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]");

2 个答案:

答案 0 :(得分:0)

注意:代码未经测试。

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

使用:(^ [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");
         }
    }

答案 1 :(得分:0)

默认情况下,

Scanner分隔空格。要读取包含空格的输入,请将其设置为仅在换行符上分隔:

in.useDelimiter("\n");

您还可以简化模式。使其不区分大小写,并使用{n,m}指定至少重复n且最多m次的模式:

Pattern.compile("[A-Z]{1,2}[0-9]{1,3}\\s?[0-9][A-Z]{2}", Pattern.CASE_INSENSITIVE);

注意这适用于英国邮政编码,例如: LS1 2AA