Remplacer un caractère à un index spécifique dans une chaîne de caractères?

j'essaie de remplacer un caractère à un index spécifique dans une chaîne.

ce que je fais est:

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

Cela donne une erreur. Existe t'il une méthode pour faire cela?

291
demandé sur jww 2011-08-05 10:36:21

8 réponses

La chaîne

est immuable en Java. Vous ne pouvez pas les modifier.

vous devez créer une nouvelle chaîne avec le caractère remplacé.

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

ou vous pouvez utiliser un StringBuilder:

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

System.out.println(myName);
458
répondu Petar Ivanov 2012-07-21 02:25:11

transformer la chaîne en un char[], remplacer la lettre par l'index, puis convertir le tableau de nouveau en une chaîne.

String myName = "domanokz";
char[] myNameChars = myName.toCharArray();
myNameChars[4] = 'x';
myName = String.valueOf(myNameChars);
114
répondu 16dots 2012-11-10 21:11:14

String est une classe immuable en java toutes les méthodes qui semblent la modifier renvoient toujours un nouvel objet string avec modification. si vous voulez manipuler une chaîne, considérez StringBuilder ou StringBuffer au cas où vous avez besoin de la sécurité du fil

17
répondu no name 2011-08-05 07:00:12

Je suis d'accord avec Petar Ivanov, mais il est préférable de mettre en œuvre de la manière suivante:

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);       
}
11
répondu Leninkumar Koppoju 2012-05-03 07:38:22

comme déjà répondu ici, String instances sont immuable . StringBuffer et StringBuilder sont mutables et adaptés à une telle fin, que vous ayez besoin d'être filé en toute sécurité ou non.

il y a cependant un moyen de modifier une chaîne de caractères mais je ne le recommanderais jamais parce qu'elle est dangereuse, peu fiable et qu'elle peut être considérée comme une tricherie : vous pouvez utiliser reflection pour modifier le tableau intérieur char Objet String contient. Reflection vous permet d'accéder à des champs et méthodes qui sont normalement cachés dans le champ d'application courant (méthodes privées ou champs d'une autre classe...).

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();
    }
}
5
répondu C.Champagne 2015-10-20 16:44:47

vous pouvez écraser une chaîne de caractères, comme suit:

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

notez que la chaîne de caractères myName apparaît sur les deux lignes et sur les deux côtés de la deuxième ligne.

donc, même si les cordes peuvent être techniquement immuables, dans la pratique, vous pouvez les traiter comme modifiables en les écrasant.

4
répondu CodeMed 2015-06-30 19:00:07

la première chose que j'aurais dû remarquer est que charAt est une méthode et lui attribuer une valeur en utilisant le signe égal ne fera rien. Si une chaîne de caractères est immuable, la méthode charAt , pour changer l'objet string doit recevoir un argument contenant le nouveau caractère. Malheureusement, la chaîne est immuable. Pour modifier la chaîne, j'ai dû utiliser StringBuilder comme suggéré par M. Petar Ivanov.

0
répondu dpp 2012-06-20 07:58:11

cela fonctionne

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

sortie: domaxokz

-6
répondu Diabolus Infernalis 2013-02-03 06:38:56