例如我有两个字符串
String a="aaabbbaaa";
String b="bbb";
我需要替换字符串a中除String b
之外的所有字符我需要下一个结果(例如我们用“+”替换所有“a”字符): +++ +++ BBB
答案 0 :(得分:2)
String a="aaabbbaaa";
String b="bbb";
String newA = "";
int i = 0;
while (i < a.indexOf(b)) {
newA += "+";
i++;
}
newA +=b;
i = a.lastIndexOf(b);
while (i < a.length()) {
newA += "+";
i++;
}
System.out.println(newA);
答案 1 :(得分:2)
出于这样的目的,我总是使用外部库:Apache-Commons-Lang。在这个包中,你有一大堆经过良好测试和精心设计的String操作方法。
答案 2 :(得分:1)
来自@Shreyas Dave的非常简单的解决方案的改进版本:
String myReplace(String a, String b, char substitute) {
final StringBuilder result = new StringBuilder(a.length());
int i = 0;
int pos = -1;
while ((pos = a.indexOf(b, pos + 1)) >= 0) {
for (; i < pos; ++i) {
result.append(substitute);
}
result.append(b);
i += b.length();
}
for (; i < a.length(); ++i) {
result.append(substitute);
}
return result.toString();
}
答案 3 :(得分:0)
至少这有效:
String a = "axabbbababbbbbbbbb";
String b = "bbb";
StringBuilder result = new StringBuilder(a.length());
for (int i = 0, alen = a.length(), blen = b.length(), last = alen - blen + 1; i < alen; i++) {
if (i < last && b.equals(a.substring(i, i + blen))) {
result.append(b);
i += blen - 1;
}
else {
result.append('+');
}
}
System.out.println(result);
答案 4 :(得分:0)
使用正则表达式,您可以执行以下操作:
public static String plussify(String data, String words) {
return (" " + data).replaceAll(".((?:"+words+")+)?", "+$1").substring(1);
}
需要添加的空格前缀,以满足字符串以不可替换的单词开头的极端情况。如果这种情况从未发生过,那么您只需要replaceAll
。 words
字符串用于正则表达式,因此需要进行转义和清理。对于单个字符串,words
的语法为bbb
;对于多个字符串bbb|d|ff
,bbb
和d
,ff
的语法为+
。
正则表达式的工作方式是使用单个字符并将其替换为+
,如果任何字符后跟一个列入白名单的字,则该字也会被消耗(从而阻止它被+
替换并附加到System.out.println(plussify("daaabbbffffbbabbd","bbb|d|ff"));
output: d+++bbbffff+++++d
代替白名单词之前的字符。
示例:强>
System.out.println("aaabbbaaa".replaceAll(".((?:bbb)+)?", "+$1"));
output: +++bbb+++
鉴于我们知道该字符串不是以任何列入白名单的词开头的:
{{1}}