Supprimer un caractère d'une chaine de caractère
charline159
Messages postés
208
Date d'inscription
Statut
Membre
Dernière intervention
-
charline159 Messages postés 208 Date d'inscription Statut Membre Dernière intervention -
charline159 Messages postés 208 Date d'inscription Statut Membre Dernière intervention -
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.
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:
- Supprimer un caractère d'une chaine de caractère
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Supprimer rond bleu whatsapp - Guide
- Supprimer une page word - Guide
2 réponses
Bonjour,
Déjà
Eventuellement ça aurait pu être
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 :
Ce qui donne :
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)
Bonjour,
J'avais également essayé avec
j'avais aussi commencé à implémenter ces méthodes pour travailler avec les tableaux:
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)
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)
Déjà, ta méthode stringToChar() existe déjà dans la classe String :
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.
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.