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

Fermé
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 - Modifié le 16 févr. 2021 à 17:48
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 - 16 févr. 2021 à 19:47
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);


    }

}
A voir également:

2 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
16 févr. 2021 à 17:57
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)
0
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 1
Modifié le 16 févr. 2021 à 18:26
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)
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
16 févr. 2021 à 19:06
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.
0
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 1 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
16 févr. 2021 à 19:47
effectivement, je me suis rendue compte trop tard que toCharArray() existait...

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