如何替换字符串中的所有字符,除了此字符串中的另一个字符串

时间:2013-05-22 09:36:24

标签: java string

例如我有两个字符串

String a="aaabbbaaa";
String b="bbb";

我需要替换字符串a中除String b

之外的所有字符

我需要下一个结果(例如我们用“+”替换所有“a”字符): +++ +++ BBB

5 个答案:

答案 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操作方法。

  • StringUtils.replace(null,*,*)= null
  • StringUtils.replace(“”,*,*)=“”
  • StringUtils.replace(“any”,null,*)=“any”
  • StringUtils.replace(“any”,*,null)=“any”
  • StringUtils.replace(“any”,“”,*)=“any”
  • StringUtils.replace(“aba”,“a”,null)=“aba”
  • StringUtils.replace(“aba”,“a”,“”)=“b”
  • StringUtils.replace(“aba”,“a”,“z”)=“zbz”

答案 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);
}

需要添加的空格前缀,以满足字符串以不可替换的单词开头的极端情况。如果这种情况从未发生过,那么您只需要replaceAllwords字符串用于正则表达式,因此需要进行转义和清理。对于单个字符串,words的语法为bbb;对于多个字符串bbb|d|ffbbbdff的语法为+

正则表达式的工作方式是使用单个字符并将其替换为+,如果任何字符后跟一个列入白名单的字,则该字也会被消耗(从而阻止它被+替换并附加到System.out.println(plussify("daaabbbffffbbabbd","bbb|d|ff")); output: d+++bbbffff+++++d 代替白名单词之前的字符。

示例:

System.out.println("aaabbbaaa".replaceAll(".((?:bbb)+)?", "+$1"));
output: +++bbb+++


鉴于我们知道该字符串不是以任何列入白名单的词开头的:

{{1}}