Java替换字符串序列忽略大小写?

时间:2013-09-20 02:31:16

标签: java string replace compare pattern-matching

对于一个项目,我给出了一个程序搜索的序列,并试图找到一系列字母。如果它找到任何,它会使这些序列大写并打印出该行。

例如,当我运行程序时,在序列bcdaaab中,并将字符串aa指定为要查找的内容,

应该打印的是:bcdAAAb
正在打印的是bcdAAab(注意第三个a没有上限)。

这是因为我只是将replaceAll函数用于不忽略大小写的字符串。我想知道是否有任何方法可以使它在我搜索时忽略大小写。如果我根本不能使用replaceAll,有人会建议其他算法吗?

3 个答案:

答案 0 :(得分:1)

您遇到的问题是,即使使用不区分大小写的匹配,它也会替换第一个'aa',然后在原始替换后开始搜索下一个匹配项。由于替换后的下一个位置是单个'a'后跟不同的字母,因此不认为它是匹配。

这将解决您的问题:

"bcdaaab".replaceAll("(?i)a((?=a)|(?<=a))","A");

不要将'aa'替换为'AA',而是使用它来一次替换一个'a'。它利用前瞻和后视来基本上说“我旁边还有另一个'吗?”


如果您因任何原因不想这样做,您可以随时进行while(matcher.find(offset))循环。

答案 1 :(得分:1)

试试这个

String s1 = "bcdaaab";
String s2 = "aa";

StringBuilder sb = new StringBuilder(s1);

for (int i = 0;; i++) {
    i = s1.indexOf(s2, i);
    if (i == -1) {
        break;
    }
    sb.replace(i, i + s2.length(), s2.toUpperCase());
}
System.out.println(sb);

输出

bcdAAAb

如果替换aA,结果也应为bcdAAAb,您可以使用

String s1 = "bcdaaab";
String s2 = "aA".toUpperCase();

StringBuilder sb = new StringBuilder(s1);
s1 = s1.toUpperCase();

for (int i = 0;; i++) {
    i = s1.indexOf(s2, i);
    if (i == -1) {
        break;
    }
    sb.replace(i, i + s2.length(), s2.toUpperCase());
}
System.out.println(sb);

答案 2 :(得分:1)

这会对你有所帮助

String abc ="NewDc";
System.out.println(abc.replaceAll("(?i)dc"," Data Center."));