您好我正在尝试将任何字符串修改为使用Uppercase Underscore创建的有效变量。
例如,如果我有以下内容:
configGlossary:poweredByIcon -> CONFIG_GLOSSARY_POWERED_BY_ICON
124$32SomeSampleString_thatI_have -> SOME_SAMPLE_STRING_THAT_I_HAVE
myJSP -> MY_JSP but my regex produces MY_J_S_P
首先我使用函数从camelCase字符串创建大写下划线。
到目前为止,我已经能够为除了最后一个结果示例之外的所有内容以及字符串开头有数字的情况实现所需的结果。我有以下正则表达式。这将删除多个下划线(如果有的话)。
String regex = "s/^[^a-zA-Z_]+|[^a-zA-Z_0-9]";
String result = variableName.replaceAll(regex, "_").replaceAll("\\_+", "_");
所以我的问题是如何产生所需的结果。是否有正则表达式,使我成为任何字符串的有效变量?
有没有办法解决最后一个样本?
答案 0 :(得分:2)
这适用于您提供的样本:
public static String toVar(String str){
str = str.replaceAll("^[^a-zA-Z_]+", "");
str = str.replaceAll("[^a-zA-Z_0-9]+", "_");
str = str.replaceAll("(?<=[a-z])(?=[A-Z])", "_");
return str.toUpperCase();
}
<强> Sample 强>:
String s;
s = "myJSON";
System.out.println(s + " -> " + toVar(s));
s = "configGlossary:poweredByIcon";
System.out.println(s + " -> " + toVar(s));
s = "124$32SomeSampleString_thatI_have";
System.out.println(s + " -> " + toVar(s));
输出:
myJSON -> MY_JSON
configGlossary:poweredByIcon -> CONFIG_GLOSSARY_POWERED_BY_ICON
124$32SomeSampleString_thatI_have -> SOME_SAMPLE_STRING_THAT_I_HAVE
答案 1 :(得分:1)
我在这个gist中拼凑了一个快速且非常脏的解决方案。我担心,您的问题没有通用的解决方案或库,因为您的任务对您的问题域非常具体。希望尽管有所帮助。
脚本的输出如下:
working for: configGlossary:poweredByIcon, got CONFIG_GLOSSARY_POWERED_BY_ICON
working for: 124$32SomeSampleString_thatI_have, got SOME_SAMPLE_STRING_THAT_I_HAVE
working for: myJSP, got MY_JSP