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

标签 java regex code-generation

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

例如:

“123 这是一些消息!” => _123_this_is_some_message(或类似的东西)

谢谢

最佳答案

假设您用 _ 替换所有无效字符,下面的代码可能会起作用(粗略示例)。您可能想为名称冲突等添加一些逻辑。它基于 on the JLS #3.8 :

An identifier is an unlimited-length sequence of Java letters and Java digits, the first of which must be a Java letter.
[...]
A "Java letter" is a character for which the method Character.isJavaIdentifierStart(int) returns true.
A "Java letter-or-digit" is a character for which the method Character.isJavaIdentifierPart(int) returns 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);
}

关于java - 将字符串转换为有效的 Java 变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12754416/

相关文章:

php - 按键过滤数组并从变异的键和原始值填充新的多维数组

php - 在 phpstorm 中使用正则表达式使用替换工具删除 php 注释

java - 从 Java 类生成切面

java - 我可以编译一个名称与类不同的 java 文件吗?

java - 有效地在两倍大的字符串中查找字符串

javascript - IE8 正则表达式不起作用

c# - 格式化生成的 C# 代码

java - 如何计时Java程序执行速度

java - Android:抑制方法调用时的警告

objective-c - Xcode 中是否有组合键来实现协议(protocol)?