繁体   English   中英

字符串匹配部分中的Java替换字符

[英]Java Replace Character in matched part of the string

您好,我正在尝试将任何字符串修改为使用大写下划线进行的有效变量。

因此,例如,如果我有以下内容:

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("\\_+", "_");

所以我的问题是如何产生所需的结果。 是否有正则表达式可以使我成为任何字符串中的有效变量?

有没有办法解决最后一个样本?

这将适用于您提供的示例:

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

在这个要点中,我提出了一个快速且(非常)肮脏的解决方案。 但是,由于您的任务非常针对您的问题领域,因此恐怕没有通用的解决方案或库来解决您的问题。 希望仍然有帮助。

脚本的输出如下:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM