from change java string replace indexing character

java - change - ¿Reemplazar un carácter en un índice específico en una cadena?



replace java (8)

Estoy tratando de reemplazar un carácter en un índice específico en una cadena.

Lo que estoy haciendo es:

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

Esto da un error. ¿Hay algún método para hacer esto?


Como se respondió anteriormente aquí, las instancias de String son inmutables . StringBuffer y StringBuilder son mutables y adecuados para tal fin, ya sea que necesite ser seguro para subprocesos o no.

Sin embargo, hay una forma de modificar una Cadena, pero nunca la recomendaría porque no es segura, no es confiable y puede considerarse trampa: puede usar la reflection para modificar la matriz de caracteres interna que contiene el objeto Cadena. reflection permite acceder a campos y métodos que normalmente están ocultos en el ámbito actual (métodos privados o campos de otra clase ...).

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


Convierta la cadena en un char [], reemplace la letra por índice y luego vuelva a convertir la matriz en una cadena.

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


Estoy de acuerdo con Petar Ivanov, pero es mejor si lo implementamos de la siguiente manera:

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


La cadena es una clase inmutable en java, cualquier método que parezca modificarla siempre devuelve un nuevo objeto de cadena con la modificación. Si desea manipular una cadena, considere StringBuilder o StringBuffer en caso de que necesite seguridad de subprocesos.


Las cuerdas son inmutables en Java. No puedes cambiarlos.

Necesitas crear una nueva cadena con el carácter reemplazado.

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

O puedes usar un StringBuilder:

StringBuilder myName = new StringBuilder("domanokz"); myName.setCharAt(4, ''x''); System.out.println(myName);


Lo primero que debería haber notado es que charAt es un método y asignarle un valor usando el signo igual no hará nada. Si una cadena es inmutable, el método charAt para realizar cambios en el objeto de cadena debe recibir un argumento que contenga el nuevo carácter. Desafortunadamente, la cuerda es inmutable. Para modificar la cadena, necesitaba usar StringBuilder como lo sugirió el Sr. Petar Ivanov.


Puede sobrescribir una cadena de la siguiente manera:

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

Tenga en cuenta que la cadena myName aparece en ambas líneas y en ambos lados de la segunda línea.

Por lo tanto, aunque las cadenas pueden ser técnicamente inmutables, en la práctica, puede tratarlas como editables sobrescribiéndolas.


esto funcionará

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

Salida: domaxokz