bonsoir!
j'ai une chaîne de caractères sous forme d'un ensemble de mots séparés par des espaces.
je veux obtenir une autre chaîne à partir de la première mais qui ne contient pas de doublons.
est-ce possible?
merci d'avance !
bonsoir!
j'ai une chaîne de caractères sous forme d'un ensemble de mots séparés par des espaces.
je veux obtenir une autre chaîne à partir de la première mais qui ne contient pas de doublons.
est-ce possible?
merci d'avance !
une façon simple consiste à utiliser split pour convertir la string en tableau de string, copier dans un nouveau tableau les éléments de l'ancien qui n'ont jamais été inséré, pour finir recréer un string a partir du nouveau tableau.
http://download.oracle.com/javase/1....lang.String%29
il y'a d'autres moyens en jouant avec substring, indexof, matches, replaceAll, mais ça risque d'être plus complexe...
merci pour la réponse!
mais peux-tu me donner un exemple simple avec Split() , qui montre surtout le traitement des doublons
et merci !
au fait, j'ai procédé par un StringTokenizer comme-suit:
et c'est réglé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 String texte = "bonjour vous nous bonjour nous nous salut"; StringTokenizer str = new StringTokenizer(texte); String[] tab = new String[str.countTokens()]; int i = 0; while (str.hasMoreTokens()) { tab[i++] = str.nextToken(); } List<String> list = Arrays.asList(tab); Set<String> set = new HashSet<String>(list); String[] nov_tab = new String[set.size()]; set.toArray(nov_tab); String nouv_txt =(Arrays.toString(nov_tab));
Pour cette partie de code je la ferais comme ça plutôt, résultat identique sans tokenizer et sans boucle.
ou éventuellement test.split("\s+"); si tu souhaite virer les espaces/tabulations/... et saut de ligne au passage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 String texte = "bonjour vous nous bonjour nous nous salut"; String[] tab = texte.split(" ");
http://download.oracle.com/javase/1....ttern.html#sum
bonjour
j'ai utilisé StringTokenizer car ma chaine de caractères contient en réalité d'autres séparateurs que je dois éliminer et j'ai pas pu réglé la chose avec split().
par contre, dans une autre partie de mon code, j'ai fait ça:
avec: nouv_txt une chaine de caractères qui contient que des mots séparés par un retour chariot, c-à-d que chaque mot est dans une ligne à part.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 String[] txt = nouv_txt.split("\r"); for(int j=0 ; j<txt.length ; j++){ System.out.println(txt[j]); }
j'ai voulu mettre les mots de la chaine dans un tableau, chaque mots dans une case, mais l'affichage de txt[j] ne m'affiche que le dernier mot de la chaine.
pouvez-vous m'expliquer
Merci !
Personnellement j'ai une préférence pour la methode split de String, je la trouve plus pratique,
Ensuite, pour faire toujours dans le simple, tu convertis ton tableau on java.util.Set, toute sa puissance consiste en ce qu'elle autorise pas les doublons
Exemple de code :
Ca doit ressembler à ça!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 String maPharse = "C'est maPhrase, maPhrase, maPhrase!!" String[] tmp = maPhrase.split("\\s"); Set set = new HashSet(); set.addAll(Arrays.asList(tmp));
il n'y a plus qu'a vérifier que ça renvois le bon nombre!
J'espère que ça répond à ton besoin
split(), ça ne permet pas de générer un tableau à partir d'une chaîne de caractères, en éliminant les délimiteurs passés en expression régulière ?
si c'est oui, alors pourquoi mon Println() m'affiche uniquement le dernier élément de mon tableau?
(je précise que mon tableau doit contenir dans chacune de ses cases un mot de la chaîne de caractères, qui contient elle des mots séparés par un \r , c'est ce que j'ai mis en expression régulière)
je vous ai mal compris peut-être ?!
merci amine, je prendrais ça en considération
mais j'ai réussi à éliminer les doublons.
mon problème maintenant , c'est dans une autre partie de mon code: comme j'ai expliqué plus haut, je n'arrive pas à afficher tout les éléments de mon tableau après sa génération avec split().
je crois qu'il me manque quelque chose au niveau de la boucle, mais je n'arrive pas à repérer !
avec ce code (repris de la suggestion de amine)
j'obtiens
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 String texte = "bonjour vous nous bonjour nous nous salut"; String[] tab = texte.split("\\s"); for (String s : tab) { System.out.println("<" + s + ">" ); } Set set = new HashSet(); set.addAll(Arrays.asList(tab)); String nouveauTexte = set.toString(); System.out.println("--->" + nouveauTexte); // suppression des elements non textuels (pas des mots) nouveauTexte = nouveauTexte.replaceAll("\\W+"," "); System.out.println("--->" + nouveauTexte + "<---"); // supression des espaces en debut et fin de chaine nouveauTexte = nouveauTexte.trim(); System.out.println("--->" + nouveauTexte + "<---");
<bonjour>
<vous>
<nous>
<bonjour>
<nous>
<nous>
<salut>
--->[nous, vous, bonjour, salut]
---> nous vous bonjour salut <---
--->nous vous bonjour salut<---
merci grandement !
je vais essayer avec ça
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager