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

如何验证字符串是否是有效的java变量?,java,regex,Java,Regex,如何最好地检查字符串输入是否是用于编码的有效java变量?我肯定我不是第一个愿意这么做的人。但也许我找不到合适的关键字来找到有用的东西 最好是一个正则表达式,它检查: 以字母开头 然后可以包含数字、字母 可以包含一些特殊的字符,如“u”(哪个?) 不能包含空格分隔符 公共静态布尔值IsValidAvailIdentifier(字符串s){ 如果(s.isEmpty()){ 返回false; } 如果(!Character.isJavaIdentifierStart(s.charAt(0))){

如何最好地检查字符串输入是否是用于编码的有效java变量?我肯定我不是第一个愿意这么做的人。但也许我找不到合适的关键字来找到有用的东西

最好是一个正则表达式,它检查:

  • 以字母开头

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

  • 可以包含一些特殊的字符,如“u”(哪个?)

  • 不能包含空格分隔符
公共静态布尔值IsValidAvailIdentifier(字符串s){
如果(s.isEmpty()){
返回false;
}
如果(!Character.isJavaIdentifierStart(s.charAt(0))){
返回false;
}
对于(int i=1;i

编辑:而且,正如@Joey所指出的,您还应该过滤掉关键字和保留字。

只需使用内置的
isName
方法:

public static boolean isName(CharSequence name)
这将返回名称在最新源版本中是否为语法有效的限定名称


查看文档。

我想知道你为什么需要…@JanDvorak:自动代码生成(或验证)?Jan:这是一个完全不同的问题。我重新打开了这个问题,因为表面上的重复实际上不是重复的。你缺少关键字,
true
false
null
。他们必须被禁止。但是是的,否则这正是规范所建议的;-)哦,是的,那是真的。还有很多其他关键字。没有那么多:可能希望在第一个if上有一个空检查和一个额外的
。字符串中的
\uu
也会使代码出错,因为它没有第二个字符character@eis我认为将NULL传递给这样的方法是错误的,所以NPE是我想要的。我不理解您评论的第二部分:\是一个有效的Java标识符。SourceVersion.isIdentifier()方法在这里是否更合适?
public static boolean isName(CharSequence name)