我正在使用此方法来确定javafx中TextField的输入字符串是否具有模式AB123CD和模式(“ \ D {2} \ d {3} \ D {2}”) 我正在使用尝试捕获附件,它捕获(手动)抛出的PatternSyntaxException。 我问这个问题,因为PatternSyntaxException使用String String Integer构造函数,显示如下异常: 索引 int 处的错误 ^ 或类似的东西 我的问题是我无法弄清楚如何获取正确的索引以放入构造函数中,或者我是否可以在替换中使用其他任何异常
这是代码的一部分:
try {
if(!tfTarga.getText().matches("\\D{2}\\d{3}\\D{2}"))
throw new PatternSyntaxException(tfTarga.getText(), tfTarga.getText(), 0);
else {
this.olCCar.add(new CCar(new ContractCars(new Contract(this.comboCont.getValue()), this.tfTarga.getText(), LocalDate.now(), Integer.parseInt(this.tfPrezzo.getText()))));
this.tfTarga.setText("");
this.tfPrezzo.setText("");
}
} catch (PatternSyntaxException e) {
alert("Error", "Format Error", e.getLocalizedMessage());
}
答案 0 :(得分:0)
PatternSyntaxException是一个RuntimeException
,当正则表达式中出现语法错误时会抛出该错误。 String::matches
方法不会在内部调用Pattern
类的静态方法matches
时引发编译时异常。这是源代码:
public static boolean matches(String regex, CharSequence input) {
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
return m.matches();
}
因此,您在这里捕获PatternSyntaxException
是因为您在此处明确地抛出了PatternSyntaxException
:
if(!tfTarga.getText().matches("\\D{2}\\d{3}\\D{2}"))
throw new PatternSyntaxException(tfTarga.getText(), tfTarga.getText(), 0);
答案 1 :(得分:0)
String.matches
引发PatternSyntaxException
。不能用来判断输入是否与正则表达式模式匹配。
由于\\D{2}\\d{3}\\D{2}
是有效的正则表达式,因此该catch (PatternSyntaxException e)
将永远不会执行。