2012-07-21 69 views

Respuesta

33

Petar Ivanov 's respuesta a replace a character at a specific index in a string question

String son inmutables en Java. No puedes cambiarlos.

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

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

O puede utilizar un StringBuilder:

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

System.out.println(myName); 
15

Kay!

En primer lugar, cuando se trata de cadenas, debe referirse a sus posiciones en la convención 0 base. Esto significa que si usted tiene una cadena como esta:

String str = "hi"; 
//str length is equal 2 but the character 
//'h' is in the position 0 and character 'i' is in the postion 1 


Con esto en mente, la mejor manera de abordar este problema es crear un método para sustituir un carácter en una posición determinada en una cadena como esta :

método:

public String changeCharInPosition(int position, char ch, String str){ 
    char[] charArray = str.toCharArray(); 
    charArray[position] = ch; 
    return new String(charArray); 
} 

entonces usted debe llamar al método 'changeCharInPosition' de esta manera:

String str = "hi"; 
str = changeCharInPosition(1, 'k', str); 
System.out.print(str); //this will return "hk" 

Si tienes alguna pregunta, no dude, publicar algo!

+0

¿Esta le permite reemplazar el personaje con nada (vacío/eliminarlo)? – trusktr

+0

¿A qué te refieres con nada? ¿Una cadena vacía o una cadena de espacios en blanco? – Chicodelarosa

+0

No sé lo que estaba pensando. Obviamente, una cadena vacía '" "' podría usarse como argumento para 'ch'. – trusktr

11

Para sustituir un carácter en una posición especificada:

public static String replaceCharAt(String s, int pos, char c) { 
    return s.substring(0,pos) + c + s.substring(pos+1); 
} 
+0

Funcionó para mí para reemplazar algunos caracteres desde una posición. –

10

Uso StringBuilder:

StringBuilder sb = new StringBuilder(str); 
sb.setCharAt(i - 1, 'k'); 
str = sb.toString(); 
2

Si necesita volver a utilizar una cadena, a continuación, utilizar StringBuffer:

String str = "hi"; 
StringBuffer sb = new StringBuffer(str); 
while (...) { 
    sb.setCharAt(1, 'k'); 
} 

EDITAR:

Tenga en cuenta que StringBuffer es seguro para subprocesos, durante el uso de StringBuilder es más rápido, pero no apta para subprocesos.

Cuestiones relacionadas