【问题标题】:Does String.matches(<pattern>) throw anything?String.matches(<pattern>) 会抛出任何东西吗?
【发布时间】:2018-07-07 15:35:53
【问题描述】:

我正在使用这种方法来确定来自 javafx 中 TextField 的输入字符串是否具有这种模式 AB123CD 与模式 ("\D{2}\d{3}\D{2}") 我正在使用 try catch 外壳,它捕获(手动)抛出的 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());
    }

【问题讨论】:

  • 请向我们展示完整的相关代码,或者至少足以让我们理解您的观点。您的正则表达式看起来不错,但这并不意味着您的代码没问题。
  • PatternSyntaxException 应该表示模式语法中的错误(顾名思义)。我(不应该表示字符串与正则表达式不匹配。只需在 if 块内显示您的警报即可。不需要异常。

标签: java exception patternsyntaxexception


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    正则表达式的语法无效时,

    String.matches 抛出PatternSyntaxException。它不用于判断输入是否与正则表达式模式匹配。

    由于\\D{2}\\d{3}\\D{2} 是一个有效的正则表达式,这个catch (PatternSyntaxException e) 将永远不会被执行。

    【讨论】:

      猜你喜欢
      • 2020-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多