将字符串转换为有效的Java变量名称

Hug*_*ata 6 java regex code-generation

对于我正在处理的代码生成工具,我需要获取一个字符串并从中生成一个有效的java变量名,但我不确定最好的方法.

例如:

"123 this is some message !"=> _123_this_is_some_message(或类似的东西)

谢谢

ass*_*ias 10

假设你用_下面的代码替换所有无效字符可以工作(粗略的例子).您可能希望为名称冲突等添加一些逻辑.它基于JLS#3.8:

标识符是无限长度的Java字母和Java数字序列,第一个必须是Java字母.
[...]
"Java letter"是Character.isJavaIdentifierStart(int)方法返回true的字符.
"Java letter-or-digit"是Character.isJavaIdentifierPart(int)方法返回true的字符.

public static void main(String[] args) {
    String s = "123 sdkjh s;sdlkjh d";
    StringBuilder sb = new StringBuilder();
    if(!Character.isJavaIdentifierStart(s.charAt(0))) {
        sb.append("_");
    }
    for (char c : s.toCharArray()) {
        if(!Character.isJavaIdentifierPart(c)) {
            sb.append("_");
        } else {
            sb.append(c);
        }
    }

    System.out.println(sb);
}
Run Code Online (Sandbox Code Playgroud)