Java替换字符串的匹配部分中的字符
问题描述:
你好,我想修改任何字符串为大写Underscore所做的有效变量。Java替换字符串的匹配部分中的字符
因此,举例来说,如果我有以下几点:
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();
}
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
我的正则表达式在http://stackoverflow.com/questions/6695624/use-regex-in-c-sharp-to-insert-spaces-between-concatenatedfilenameslikethis/6696031#6696031可以使用,如果首选的话,它处理更多的细节if这是OP想要的。 – Qtax
答
我在这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
“是否有正则表达式可以让我成为任何字符串的有效变量?”号码 – FailedDev
好,那么任何一种方法?样品?图书馆?我宁愿使用经过测试的东西,而不是创建我的东西,然后解决它可能存在的任何可能的问题。 – DArkO
问题在于你的问题中的“任何”。任何东西都可以是字面意思。您需要提供涵盖全部或更多测试用例的更具体规则。那么解决方案可能是可行的。 – FailedDev