par*_*ier 11 java string code-generation identifier
我需要转换任意字符串:
到有效的Java标识符:
是否有现有的工具可用于此任务?
有了这么多Java源代码重构/生成框架,人们会认为这应该是非常常见的任务.
Boh*_*ian 12
这个简单的方法将任何输入字符串转换为有效的java标识符:
public static String getIdentifier(String str) {
try {
return Arrays.toString(str.getBytes("UTF-8")).replaceAll("\\D+", "_");
} catch (UnsupportedEncodingException e) {
// UTF-8 is always supported, but this catch is required by compiler
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
例:
"%^&*\n()" --> "_37_94_38_42_10_56_94_40_41_"
Run Code Online (Sandbox Code Playgroud)
任何输入字符都可以使用 - 外语字符,换行符,任何东西!
另外,这个算法是:
str1.equals(str2)感谢Joachim Sauer提出的UTF-8建议
如果冲突正常(两个输入字符串可能产生相同的结果),则此代码生成可读输出:
public static String getIdentifier(String str) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
if ((i == 0 && Character.isJavaIdentifierStart(str.charAt(i))) || (i > 0 && Character.isJavaIdentifierPart(str.charAt(i))))
sb.append(str.charAt(i));
else
sb.append((int)str.charAt(i));
}
return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
它保留有效标识符的字符,仅将那些无效的字符转换为其十进制等值.