替换字符串指定索引处的字符| Java Debug 笔记

481 阅读1分钟

**本文正在参加「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 :链接