String x = "big haystack";
x.replace("haystack", "needle");
System.out.println(x);
> big haystack
// calling replace on strings only makes new ones;
// you have to assign the result:
String x = "big haystack";
String y = x.replace("haystack", "needle");
System.out.println(y);
> big needle
StringBuilder z = new StringBuilder();
z.append("big haystack");
z.replace(0, 3, "little");
System.out.println(z);
> little haystack
// Not so with StringBuilder, replace
// mutates the builder itself.
1条答案
按热度按时间13z8s7eq1#
问题是
replace
意味着两件完全不同的事情。在
java.lang.String
,的replace
方法如下:haystack.replace(“针”,“找到”)
这意味着:查找字符序列的每个匹配项
"needle"
在变量引用的字符串中haystack
,并将它们全部替换为序列"found"
. 返回对新形成的字符串的引用(因为java.lang.string是不可变的,所以replace
不会改变你调用它的字符串中的任何内容;它只是制造新的弦。在
java.lang.StringBuilder/Buffer
,的replace
方法意味着完全不同的东西:缓冲区。替换(5,7,“你好!”)
这意味着:修改
buffer
(因为stringbuilder/buffer是可变的);删除索引5到7中是否有,然后放入Hello!
相反。如果你说“为什么早上好!”在那里,你现在有“为什么盖罗!“早上好!”相反。然后这个方法就可以了
return this;
-为了方便。示例