我想从字符串中替换多个不区分大小写的字符串。
我本可以使用:
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
答案 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 case和replaceAll()
@flown评论(谢谢),您需要使用
str.replaceAll("(?i)" + Pattern.quote(old[i]), nw[i]);
因为正则表达式将某些具有特殊含义的特殊字符对待,例如:.
为any single character
因此,使用Pattern.quote
可以做到这一点。
答案 1 :(得分:3)
由于您已经在使用StringUtils
,StringUtils.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。