-2

例如我有两个字符串

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

我需要替换字符串 a 中的所有字符,字符串 b 除外

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

4

5 回答 5

2

为此,我总是使用外部库:Apache-Commons-Lang。在这个包中,您有大量经过良好测试和精心设计的字符串操作方法。

  • 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"
于 2013-05-22T09:50:12.580 回答
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);
于 2013-05-22T09:48:28.887 回答
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();
}
于 2013-05-22T13:56:12.233 回答
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);
于 2013-05-22T11:23:49.127 回答
0

使用正则表达式,您可以执行以下操作:

public static String plussify(String data, String words) {
    return (" " + data).replaceAll(".((?:"+words+")+)?", "+$1").substring(1);
}

需要添加空格前缀来满足字符串以不被替换的单词开头的极端情况。如果这永远不会发生,那么您所需要的就是replaceAll. 该words字符串在正则表达式中使用,因此需要相应地进行转义和清理。的语法words适用bbb于单个字符串或bbb|d|ff多个字符串(bbb,dff)。

正则表达式的工作原理是使用单个字符并将其+替换++列入白名单的词。

例子:

System.out.println(plussify("daaabbbffffbbabbd","bbb|d|ff"));

output: d+++bbbffff+++++d


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

System.out.println("aaabbbaaa".replaceAll(".((?:bbb)+)?", "+$1"));
output: +++bbb+++
于 2013-05-22T13:31:02.480 回答