我正在尝试替换字符串中特定下标处的一个字符。

我所做的是:

String myName = "domanokz";
myName.charAt(4) = 'x';

这将给出一个错误。有什么方法可以做到吗?


当前回答

你可以像这样重写同一个字符串

String myName = "domanokz";
myName = myName.substring(0, index) + replacement + myName.substring(index+1); 

其中index =要替换的char的索引。 索引+1添加字符串的其余部分

其他回答

我应该注意到的第一件事是charAt是一个方法,使用等号将值赋给它不会做任何事情。如果字符串是不可变的,charAt方法要对字符串对象进行更改,必须接收一个包含新字符的参数。不幸的是,字符串是不可变的。为了修改字符串,我需要使用Petar Ivanov先生建议的StringBuilder。

你可以覆盖一个字符串,如下所示:

String myName = "halftime";
myName = myName.substring(0,4)+'x'+myName.substring(5);  

请注意,字符串myName出现在两行中,并且出现在第二行的两侧。

因此,即使字符串在技术上可能是不可变的,在实践中,您可以通过覆盖它们来将它们视为可编辑的。

你可以像这样重写同一个字符串

String myName = "domanokz";
myName = myName.substring(0, index) + replacement + myName.substring(index+1); 

其中index =要替换的char的索引。 索引+1添加字符串的其余部分

我同意Petar Ivanov的观点,但最好按照以下方式实施:

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);       
}

这是可行的

   String myName="domanokz";
   String p=myName.replace(myName.charAt(4),'x');
   System.out.println(p);

输出:domaxokz