Supprimer un caractère d'une chaine de caractère

Signaler
Messages postés
143
Date d'inscription
lundi 14 août 2017
Statut
Membre
Dernière intervention
3 mars 2021
-
Messages postés
143
Date d'inscription
lundi 14 août 2017
Statut
Membre
Dernière intervention
3 mars 2021
-
Bonjour, j'essaie de supprimer un caractère d'une chaine, mais avec le code suivant je n'y arrive pas.
Est-ce que vous pourriez m'indiquer comment supprimer effectivement le caractère ?

là j'ai choisi de parcourir une String, mais je ne sais pas si c'est la meilleure option (à la base j'avais choisi de parcourir un tableau puis finalement je me suis dit que c'était pas une bonne idée, étant donné que je cherche à supprimer)

Je précise que j'aimerais supprimer ce qu'il y a en commun entre les deux chaines de caractères.

package com.company;

public class Main {

    public static void main(String[] args){

        String motTest1= "chenille";
        String motTest2 = "chien";

        System.out.println(motTest1 + motTest2);

        for (int i = 0; i < motTest1.length(); i++) {
            for (int j = 0; j < motTest2.length(); j++) {
                if (motTest1.charAt(i) == motTest2.charAt(j)){

                    motTest1 = motTest1.replace("charAt(i)", "");
                    motTest2 = motTest2.replace("charAt(j)", "");
                }
            }
        }

        System.out.println(motTest1 + motTest2);


    }

}

2 réponses

Messages postés
16262
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
3 mars 2021
2 800
Bonjour,

Déjà
replace("charAt(i)", "");
c'est forcément faux.
Eventuellement ça aurait pu être
replace(charAt(i), "");
mais sans les guillemets autour du charAt(i)

De manière générale, un String est immuable, c'est à dire qu'il ne peut pas être modifié.
Toute changement de valeur nécessite de recréer un nouveau String, le plus performant est donc de travailler directement sur le tableau de caractères qui compose un String.

Exemple :
package com.company;

public class Main {

    public static String removeNthChar(String string, int n) {
        char[] chars = new char[string.length() - 1];
        string.getChars(0, n, chars, 0); // copie des caractères avant n
        string.getChars(n + 1, string.length(), chars, n); // copie des caractères après n
        return new String(chars);
    }

    public static void main(String[] args) {
        String text = "0123456789";
        for (int n = 0; n < text.length(); n++) {
            System.out.println(removeNthChar(text, n));
        }
    }
}

Ce qui donne :
123456789 // l'affichage de 0123456789 privé de son premier caractère (0)
023456789 // l'affichage de 0123456789 privé de son deuxième caractère (1)
013456789
012456789
012356789
012346789
012345789
012345689
012345679
012345678 // l'affichage de 0123456789 privé de son dernier caractère (9)
Messages postés
143
Date d'inscription
lundi 14 août 2017
Statut
Membre
Dernière intervention
3 mars 2021
1
Bonjour,
J'avais également essayé avec
replace(charAt(i), "");
mais j'ai vu que ça ne marchait pas, du coup j'ai fini par tenter l'intentable...

j'avais aussi commencé à implémenter ces méthodes pour travailler avec les tableaux:

package com.company;
import java.io.FileNotFoundException;


public class Complementaire {

    static char[] stringToChar(String string){
        char[] stringTab = new char[string.length()];
        for (int i = 0; i < string.length(); i++) {
            stringTab[i] = string.charAt(i);
        }
        return stringTab;
    }

    static void printArray(char[] array){
        for (char c: array) {
            System.out.println(c);
        }
    }
    

    //char[] complementaire = new char[ensemble.length()];

    public static void main(String[] args) throws FileNotFoundException {

        char[] ensemble = stringToChar("chenille");
        //printArray(ensemble);
        char[] mot = stringToChar("chien");
        //printArray(mot);      


    }

}



mon but est de récupérer la partie non commune entre les deux mots, puis ensuite de comparer ce que j'ai récupéré avec une liste de mots (qui provient d'un fichier.txt).

finalement, dans cette situation, c'est quoi la meilleure option entre les tableaux et les String ? (sachant qu'ensuite, je devrais travailler avec des hashmap)
Messages postés
16262
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
3 mars 2021
2 800
Déjà, ta méthode stringToChar() existe déjà dans la classe String :
char[] ensemble = "chenille".toCharArray();
char[] mot = "chien".toCharArray();

Ensuite, entre char[] et String il vaut mieux travailler avec les char[], parce que manipuler les String implique de recréer un objet à chaque modification, contrairement aux char[] que l'on peut modifier autant qu'on veut (tant que leur taille ne change pas).

Remarque : pour ton programme je t'invite à travailler sur des tableaux triés, c'est ce qu'il y a de plus efficace.
Il suffit ensuite de lire les lettres triées les unes après les autres comme tu avais fait pour la partie fusion du mergeSort.
Messages postés
143
Date d'inscription
lundi 14 août 2017
Statut
Membre
Dernière intervention
3 mars 2021
1 >
Messages postés
16262
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
3 mars 2021

effectivement, je me suis rendue compte trop tard que toCharArray() existait...

merci pour ton conseil, je vais essayer de mettre ça en place !