replacestring中特定索引处的字符?

我试图replacestring中特定索引处的字符。

我正在做的是:

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

这给了一个错误。 有没有办法做到这一点?

string在Java中是不可变的。 你不能改变它们。

您需要创build一个replace字符的新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); 

将string转换为char [],按索引replace该字母,然后将该数组转换回string。

 String myName = "domanokz"; char[] myNameChars = myName.toCharArray(); myNameChars[4] = 'x'; myName = String.valueOf(myNameChars); 

string是一个在Java中的不可变类,任何似乎修改它的方法总是返回一个新的string对象的修改。 如果你想操纵一个string,请考虑StringBuilder或StringBuffer,以防你需要线程安全

我同意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实例是不可变的StringBufferStringBuilder是可变的,适合这样的目的,不pipe你是否需要线程安全。

然而,有一种方法来修改一个string,但我永远不会推荐它,因为它是不安全的,不可靠的,它可以被认为是作弊:你可以使用reflection修改String对象包含的内部char数组。 reflection允许您访问通常隐藏在当前作用域中的字段和方法(私有方法或来自另一个类的字段…)。

 public static void main(String[] args) { String text = "This is a test"; try { //String.value is the array of char (char[]) //that contains the text of the String Field valueField = String.class.getDeclaredField("value"); //String.value is a private variable so it must be set as accessible //to read and/or to modify its value valueField.setAccessible(true); //now we get the array the String instance is actually using char[] value = (char[])valueField.get(text); //The 13rd character is the "s" of the word "Test" value[12]='x'; //We display the string which should be "This is a text" System.out.println(text); } catch (NoSuchFieldException | SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } 

您可以覆盖一个string,如下所示:

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

请注意,stringmyName出现在两行,并在第二行的两侧。

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

首先我应该注意的是, charAt是一种方法,使用等号给它赋值并不会做任何事情。 如果一个string是不可变的, charAt方法,要改变string对象,必须接收一个包含新字符的参数。 不幸的是,string是不可变的。 为了修改string,我需要像Petar Ivanov先生build议的那样使用StringBuilder。

这将工作

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

输出:domaxokz