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

标签 java regex replace

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

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

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/

相关文章:

java - 有没有可以代替键的排序Map

regex - Bareword 在 Perl 脚本中的错误处找到了运算符(operator)预期的位置

java - 正则表达式使用分隔符(分号;)分割字符串,但出现在字符串内部的字符串除外

regex - 使用正则表达式查找拼写错误

PHP 相当于 Python 的 `str.format` 方法?

java - 如何将另一个项目中的应用程序用作库?

java - 安卓应用包名

Java没有输出返回

java - 无法在weblogic 12.1.3上部署spring boot构建的ear文件

SQL - 如何用单个 future 日期时间替换一系列日期时间?