对于一个项目,我给出了程序搜索并尝试查找字母序列的序列。如果找到,它将这些序列大写并打印出该行。
例如,bcdaaab
当我运行程序时按顺序指定字符串aa
作为要查找的内容,
应该打印的是:bcdAAAb
正在打印的是:(bcdAAab
注意第三个a
没有上限)。
这是因为我只是将replaceAll
函数用于不忽略大小写的字符串。我想知道是否有任何方法可以使它在我搜索时忽略大小写。如果我根本不能使用replaceAll
,有人可以建议其他算法吗?
对于一个项目,我给出了程序搜索并尝试查找字母序列的序列。如果找到,它将这些序列大写并打印出该行。
例如,bcdaaab
当我运行程序时按顺序指定字符串aa
作为要查找的内容,
应该打印的是:bcdAAAb
正在打印的是:(bcdAAab
注意第三个a
没有上限)。
这是因为我只是将replaceAll
函数用于不忽略大小写的字符串。我想知道是否有任何方法可以使它在我搜索时忽略大小写。如果我根本不能使用replaceAll
,有人可以建议其他算法吗?
这将帮助你
String abc ="NewDc";
System.out.println(abc.replaceAll("(?i)dc"," Data Center."));
您遇到的问题是,即使使用不区分大小写的匹配,它也会替换第一个“aa”,然后在原始替换之后开始搜索下一个匹配项。由于替换后的下一个位置是单个 'a' 后跟一个不同的字母,因此它不认为它是匹配的。
这将解决您的问题:
"bcdaaab".replaceAll("(?i)a((?=a)|(?<=a))","A");
不要用“AA”替换“aa”,而是一次替换一个“a”。它利用前瞻和后瞻来基本上说“我旁边还有另一个'a'吗?”
如果您出于某种原因不想这样做,您可以随时进行while(matcher.find(offset))
循环。
尝试这个
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);