模式语法异常如何工作

how pattern syntax exception works

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 块中使用以下语句检查名称是否有效并显示错误消息(如果有)?

NAME_PATTERN.matcher(name).matches()

以及如何使用PatternSyntaxException

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

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

PatternSyntaxException class 表示抛出未经检查的异常以指示正则表达式模式中的语法错误。这意味着如果您的 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());
    }
    
}