**本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接 **
问题:
我尝试替换字符串特定索引处的字符
我是这样做的:
String myName = "domanokz";
myName.charAt(4) = 'x';
这样报错了,我应该怎样做才能替换?
------------------------------以下为回答,按支持票数排序----------------------------------
回答1(支持票数615):
java中的String类是不可变的,你修改不了字符串
你需要在替换字符时创建一个新的字符串
String myName = "domanokz";
String newName = myName.substring(0,4)+'x'+myName.substring(5);
或者是你可以使用StringBuilder类:
StringBuilder myName = new StringBuilder("domanokz");
myName.setCharAt(4, 'x');
System.out.println(myName);
回答2(支持票数180):
将字符串先转换成char数组,替换char数组指定索引处的值,然后再把char数组转换成字符串
String myName = "domanokz";
char[] myNameChars = myName.toCharArray();
myNameChars[4] = 'x';
myName = String.valueOf(myNameChars);
回答3(支持票数180):
java中的String类是不可变的,所有对字符串进行修改的方法都会返回一个新的字符串
如果你想修改字符串可以考虑使用StringBuilder或StringBuffer,其中StringBuffer可以在多线程中使用,不会出现线程安全问题
回答4(支持票数13):
我觉得以下的实现方式更好:
public String replace(String str, int index, char replace){
if(str==null){
return str;
}else if(index<0 || index>=str.length()){
return str;
}
char[] chars = str.toCharArray();
chars[index] = replace;
return String.valueOf(chars);
}
回答5(支持票数7):
你可以覆盖一个字符串,代码如下:
String myName = "halftime";
myName = myName.substring(0,4)+'x'+myName.substring(5);
请注意,字符串变量名myName出现在第二行等号两侧。
因此,即使字符串在理论上是不可变的,但实际上,您可以通过覆盖它们将它们视为可编辑的。
文章翻译自Stack Overflow :链接