如何验证字符串是否是有效的java变量?

mem*_*und 12 java regex

如何最好地检查字符串输入是否是用于编码的有效java变量?我敢肯定,我不是第一个愿意这样做的人.但也许我错过了正确的关键字来找到有用的东西.

最好的可能是RegEx,它检查:

  • 以一封信开头

  • 然后可以包含数字,字母

  • 可以包含一些特殊字符,比如'_'(哪个?)

  • 可能不包含空格分隔符

JB *_*zet 19

public static boolean isValidJavaIdentifier(String s) {
    if (s.isEmpty()) {
        return false;
    }
    if (!Character.isJavaIdentifierStart(s.charAt(0))) {
        return false;
    }
    for (int i = 1; i < s.length(); i++) {
        if (!Character.isJavaIdentifierPart(s.charAt(i))) {
            return false;
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

编辑:并且,如@Joey所示,您还应该过滤掉关键字和保留字.

  • 你缺少关键字,`true`,`false`和`null`.他们不得不被禁止.但是,是的,否则这正是规范建议的;-) (6认同)

Den*_*huk 13

只需使用内置isName方法:

public static boolean isName(CharSequence name)
Run Code Online (Sandbox Code Playgroud)

这将返回名称是否是最新源版本中语法上有效的限定名称.

请参阅isName()文档.