多个不区分大小写的字符串替换

时间:2019-01-22 10:19:09

标签: java java-8

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

我本可以使用:  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

3 个答案:

答案 0 :(得分:5)

您可以尝试使用regex对其进行存档

示例

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);

结果:

  

我的昵称是Abhi

基本理想:Regex ignore casereplaceAll()

@flown评论(谢谢),您需要使用

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

因为正则表达式将某些具有特殊含义的特殊字符对待,例如:.any single character

因此,使用Pattern.quote可以做到这一点。

答案 1 :(得分:3)

由于您已经在使用StringUtilsStringUtils.replaceIgnoreCase是一个不错的选择。值得一提的是版本3.5+是必需的。

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

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

     

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

 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);

答案 2 :(得分:0)

在JAVA中,字符串区分大小写;如果要对它们不敏感地使用它们,则应使用正确的方法。 例如equals()equalsIgnoreCase()确实不同。

您可以使用:

 String.equalsIgnoreCase()

或者:

compareToIgnoreCase()

,如果这些方法返回了正确的数据,则可以使用它们将它们替换为所需的String。