我正在尝试读取输入字符串-如果它符合预定义的模式,则应将其返回。如果输入不正确,则将引发异常。
到目前为止,这就是我所拥有的。我的问题是,无论输入如何,它总是会引发异常。我在这里可能做错了什么?
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/