String.matches(<pattern>)是否抛出任何东西?

时间:2018-07-07 15:35:53

标签: java exception patternsyntaxexception

我正在使用此方法来确定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());
    }

2 个答案:

答案 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)将永远不会执行。