您好,我正在尝试将任何字符串修改为使用大写下划线创建的有效变量。
例如,如果我有以下内容:
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
首先,我使用一个函数从驼峰字符串创建大写下划线。
到目前为止,除了最后一个结果示例以及字符串开头有数字的情况之外,我已经能够实现所有内容所需的结果。我有以下正则表达式。这也将删除多个下划线(如果有)。
String regex = "s/^[^a-zA-Z_]+|[^a-zA-Z_0-9]";
String result = variableName.replaceAll(regex, "_").replaceAll("\\_+", "_");
所以我的问题是如何产生所需的结果。有没有一个正则表达式可以使我成为任何字符串的有效变量?
有没有办法解决最后一个样本?
最佳答案
这适用于您提供的示例:
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
关于Java 替换字符串匹配部分中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8354755/