59

假设我有一个string这样的字符串:

"abcd=0; efgh=1"

我想用“dddd”替换“abcd”。我试图做这样的事情:

string.replaceAll("abcd","dddd");

这没用。有什么建议么?

编辑:更具体地说,我正在使用 Java,我正在尝试解析 HTML 文档,特别是<script>标签之间的内容。我已经找到了一种将这些内容解析为字符串的方法:

 if(tag instanceof ScriptTag){
        if(((ScriptTag) tag).getStringText().contains("DataVideo")){
            String tagText = ((ScriptTag)tag).getStringText();
      }
}

现在我必须找到一种方法如何用另一个子字符串替换一个子字符串。

4

7 回答 7

83

您需要使用replaceAll()方法的返回值。replaceAll()不替换当前字符串中的字符,它返回一个带有替换的新字符串。

  • 字符串对象是不可变的,它们的值在创建后不能更改。
  • 如果您不需要正则表达式,您可以使用 replace() 而不是 replaceAll()。
    String str = "abcd=0; efgh=1";
    String replacedStr = str.replaceAll("abcd", "dddd");

    System.out.println(str);
    System.out.println(replacedStr);

输出

abcd=0; efgh=1
dddd=0; efgh=1
于 2013-05-22T22:09:09.583 回答
14

你应该注意的2件事:

  1. Java中的字符串是不可变的,因此您需要将替换方法调用的返回值存储在另一个字符串中。
  2. 您在这里并不需要正则表达式,只需一个简单的调用即可String#replace(String)完成这项工作。

所以只需使用以下代码:

String replaced = string.replace("abcd", "dddd");
于 2013-05-22T22:24:50.563 回答
13

您需要创建变量以将新值分配给,如下所示:

String str = string.replaceAll("abcd","dddd");
于 2013-05-22T23:36:01.993 回答
9

通过正则表达式我认为这是java,该方法replaceAll()返回一个替换子字符串的新字符串,所以试试这个:

String teste = "abcd=0; efgh=1";

String teste2 = teste.replaceAll("abcd", "dddd");

System.out.println(teste2);

输出:

dddd=0; efgh=1
于 2013-05-22T22:08:04.863 回答
4

请注意,替换字符串中的反斜杠 ( \) 和美元符号 ( $) 可能会导致结果与将其视为文字替换字符串时的结果不同;见 Matcher.replaceAll。如果 Matcher.quoteReplacement(java.lang.String) 需要,用于抑制这些字符的特殊含义。

来自javadoc

于 2014-12-01T08:18:59.363 回答
0

在进行替换或替换错误的东西后,您可能没有分配它。尝试 :

String haystack = "abcd=0; efgh=1";
String result = haystack.replaceAll("abcd","dddd");
于 2013-05-22T22:08:34.130 回答
-1

在 JavaScript 中:

var str = "abcdaaaaaabcdaabbccddabcd";
document.write(str.replace(/(abcd)/g,"----"));
//example output: ----aaaaa----aabbccdd----

在其他语言中,这将是类似的。请记住启用全局匹配。

于 2013-05-22T22:08:16.787 回答