3

我想从一个字符串中替换多个不区分大小写的字符串。

我本可以使用: org.apache.commons.lang.StringUtils.replaceEach(text, searchList, replacementList)

但适用于区分大小写的字符串。

是否有类似的方法适用于不区分大小写的字符串?

static String[] old = {"ABHISHEK","Name"};
static String[] nw = {"Abhi","nick name"};
static String s="My name is Abhishek";
System.out.println(StringUtils.replaceEach(s, old, nw));

输出:

My name is Abhishek

预期的:

My nick name is Abhi
4

3 回答 3

5

您可以尝试使用正则表达式对其进行存档

例子

String str = "Dang DANG dAng dang";
//replace all dang(ignore case) with Abhiskek
String result = str.replaceAll("(?i)dang", "Abhiskek");
System.out.println("After replacement:" + "   " + result);

结果:

替换后:Abhiskek Abhiskek Abhiskek Abhiskek

编辑


String[] old = {"ABHISHEK","Name"};
String[] nw = {"Abhi","nick name"};
String s="My name is Abhishek";
//make sure old and nw have same size please
for(int i =0; i < old.length; i++) {
    s = s.replaceAll("(?i)"+old[i], nw[i]);
}
System.out.println(s);

结果:

我的昵称是阿比

基本理想:Regex 忽略大小写replaceAll()

从评论@flyn(谢谢)你需要使用

str.replaceAll("(?i)" + Pattern.quote(old[i]), nw[i]);

因为正则表达式处理一些具有不同含义的特殊字符,例如.any single character

所以使用Pattern.quotewill 做到这一点。

于 2019-01-22T10:26:27.977 回答
3

由于您已经在使用StringUtils,因此StringUtils.replaceIgnoreCase是一个不错的选择。值得一提的是3.5+所需的版本。

public static String replaceIgnoreCase(String text,
                                       String searchString,
                                       String replacement)

不区分大小写地替换另一个字符串中所有出现的字符串。

传递给此方法的空引用是无操作的。

 StringUtils.replaceIgnoreCase(null, *, *)        = null
 StringUtils.replaceIgnoreCase("", *, *)          = ""
 StringUtils.replaceIgnoreCase("any", null, *)    = "any"
 StringUtils.replaceIgnoreCase("any", *, null)    = "any"
 StringUtils.replaceIgnoreCase("any", "", *)      = "any"
 StringUtils.replaceIgnoreCase("aba", "a", null)  = "aba"
 StringUtils.replaceIgnoreCase("abA", "A", "")    = "b"
 StringUtils.replaceIgnoreCase("aba", "A", "z")   = "zbz"

在你的情况下:

String[] old = {"ABHISHEK", "Name"};
String[] nw = {"Abhi", "nick name"};
String s = "My name is Abhishek";

for (int i = 0; i < old.length; i++) {
    s = StringUtils.replaceIgnoreCase(s, old[i], nw[i]);
}

System.out.println(s);

输出:

My nick name is Abhi

如果您要经常使用它,您甚至可以创建一个辅助方法:

public static String replaceIgnoreCase(final String s, final String searchList[], final String replacementList[]) {
    if (searchList.length != replacementList.length)
        throw new IllegalArgumentException("Search list and replacement list sizes do not match");

    String replaced = s;
    for (int i = 0; i < searchList.length; i++) {
        replaced = StringUtils.replaceIgnoreCase(s, searchList[i], replacementList[i]);
    }

    return replaced;
}

并像使用库调用一样使用它:

s = replaceIgnoreCase(s, old, nw);
于 2019-01-22T10:48:04.250 回答
0

在 JAVA 中,字符串区分大小写;如果你想不敏感地使用它们,你应该使用正确的方法。例如equals()equalsIgnoreCase().

您可以使用:

 String.equalsIgnoreCase()

或者:

compareToIgnoreCase()

如果这些方法返回正确的数据,您可以使用它们将它们替换为您想要的字符串。

于 2019-01-22T10:44:06.627 回答