有人能解释一下replace()在Java中是如何工作的吗?

有人能解释一下replace()在Java中是如何工作的吗?,java,function,optimization,replace,Java,Function,Optimization,Replace,str1的值: StringBuffer str1="41415" 我节目的一部分 str1=str1.replace(i,i+1,'9'); str1=str1.replace(j,j+1,'9'); 在这种情况下,如果 i=0; j=str1.length-1; 这会将我的整个字符串更改为: str1=99999; 我不明白,然而: str1= str1.replace(str1.charAt(i),str1.charAt(j)); 这样做很好 请解释一下替换在

str1的值:

StringBuffer str1="41415"
我节目的一部分

str1=str1.replace(i,i+1,'9');
str1=str1.replace(j,j+1,'9');
在这种情况下,如果

i=0; j=str1.length-1;
这会将我的整个字符串更改为:

str1=99999;
我不明白,然而:

str1= str1.replace(str1.charAt(i),str1.charAt(j));
这样做很好


请解释一下替换在Java中是如何工作的。

问题是
replace
意味着两种完全不同的东西

java.lang.String
中,
replace
方法的工作原理如下:

haystack.更换(“针”,“找到”)
这意味着:在变量
haystack
引用的字符串中查找字符序列
“pinder”
,并将它们全部替换为序列
“found”
。返回对新形成字符串的引用(因为java.lang.string是不可变的,所以此
replace
不会更改调用它的字符串中的任何内容;它只生成新字符串

java.lang.StringBuilder/Buffer
中,
replace
方法的含义完全不同:

buffer.替换(5,7,“你好!”)
这意味着:修改
buffer
(因为StringBuilder/buffer是可变的);删除索引5到7中是否存在,然后将
Hello!
改为。如果其中有“Why Good Morning!”,则现在改为“Why GHello!d Morning!”

然后,为了方便起见,该方法只返回这个;

例子
我不相信第二种方法行得通,因为没有采用两个参数的方法
StringBuffer.replace
。我不相信第一种方法行得通,因为
'9'
不是字符串。String replace(char oldChar,char newChar):它用newChar字符替换所有出现的oldChar字符。例如,“pog pance”。replace('p','d')将返回dog dance。请提供一个自包含的编译代码段。我试图复制您的第一个案例,它为我生成了
91419
——正如预期的那样。@JérômeTeisseire但str1是一个StringBuffer,而不是字符串。
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.