【问题标题】:how pattern syntax exception works模式语法异常是如何工作的
【发布时间】:2021-09-20 19:15:41
【问题描述】:
private static final String NAME_REGEX = "^[a-zA-Z]+(([',. -][a-zA-Z ])?[a-zA-Z]*)*$";
 
private static final Pattern NAME_PATTERN = Pattern.compile(NAME_REGEX);

如果名称有效,我如何在 try n catch 块中使用以下语句来 chk 并显示错误消息(如果有)?

NAME_PATTERN.matcher(name).matches()

以及如何使用PatternSyntaxException

【问题讨论】:

    标签: java regex try-catch patternsyntaxexception


    【解决方案1】:

    您不需要try...catch 来检查名称是否有效。你写的那行:NAME_PATTERN.matcher(name).matches() 返回一个布尔值,如果匹配则返回 true,否则返回 false。所以你可以在 if...else 块中检查这个布尔值:

        boolean matches = NAME_PATTERN.matcher(name).matches();
        if (matches) {
            System.out.println("valid");
        } else {
            System.out.println("invalid");
        }
    

    PatternSyntaxException 类表示抛出未经检查的异常,以指示正则表达式模式中的语法错误。这意味着如果你的NAME_REGEX 正则表达式有语法错误,那么当你调用Pattern.compile(NAME_REGEX) 时,就会抛出这个异常。

    你可以try...catch点赞:

    public static void main(String[] args) {
    
        try {
            final String NAME_REGEX = "^[a-zA-Z]+(([',. -][a-zA-Z ])?[a-zA-Z]*)*$";
            final Pattern NAME_PATTERN = Pattern.compile(NAME_REGEX);
    
            String name = "sdasdada"; //the name input
            boolean matches = NAME_PATTERN.matcher(name).matches();
            if (matches) {
                System.out.println("valid");
            } else {
                System.out.println("invalid");
            }
        } catch(PatternSyntaxException e){
            System.out.println("PatternSyntaxException: ");
            System.out.println("Description: "+ e.getDescription());
            System.out.println("Index: "+ e.getIndex());
            System.out.println("Message: "+ e.getMessage());
            System.out.println("Pattern: "+ e.getPattern());
        }
        
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 1970-01-01
      • 2016-06-24
      • 2020-06-28
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      • 2021-06-15
      • 2011-02-12
      相关资源
      最近更新 更多