Extraction de données d'une String [Résolu]

Messages postés
47
Date d'inscription
jeudi 14 janvier 2010
Statut
Membre
Dernière intervention
26 juillet 2011
- - Dernière réponse : cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
- 27 juil. 2011 à 14:29
Bonjour,

J'ai une JCombobox Chargé de données sql :
(exemples)
1 - A4 80 grs Blanc (ramette de 500) *
220 - SAC KRAFT 229X324 90 GRS AC X 250 *

Sur ces données, je doit extraire juste le nom du produit (donc laisser de coté le chiffre et le tiret au début avec les espaces).

J'ai pensé a utiliser la classe StringTokenizer, mais je n'arrive pas a obtenir l'effet escompté ... voici mon code :

StringTokenizer st = new StringTokenizer(saisie.CEntLibProd.getSelectedItem().toString(), " - ");
        st.nextToken();
        String libprod = st.nextToken();


et Voila ce que j'obtiens avec un traitement sur mon premier exemple :
A4

Auriez-vous des idées pour m'aiguiller ?
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
246
3
Merci
Bonjour,

Les StringTokenizer découpent la chaine en fonction des caractères, Le délimiteur " - " signifie que le caractère qui délimite un mot est soit un espace soit un - soit un espace.

Pour faire ce que tu veux, tu vas devoir utiliser les expressions régulières et la méthode split de la classe String :

String chaine="1 - A4 80 grs Blanc (ramette de 500) *";
String[] res=chaine.split("\\p{Space}-\\p{Space}");
for(String s:res){
    System.out.println(s);
}


Résultat de l'output :
1
A4 80 grs Blanc (ramette de 500) *

La valeur que tu cherches à récupérer est donc res[1]

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Julien39
Messages postés
47
Date d'inscription
jeudi 14 janvier 2010
Statut
Membre
Dernière intervention
26 juillet 2011
0
Merci
Daccord merci beaucoup, mais cela sera-t-il la meme chose pour :
220 - SAC KRAFT 229X324 90 GRS AC X 250 * ?

du fait qu'il y a 2 chiffres de plus, qur la taille de la String n'est pas pareille ?
Commenter la réponse de H4rDBuG
Messages postés
47
Date d'inscription
jeudi 14 janvier 2010
Statut
Membre
Dernière intervention
26 juillet 2011
0
Merci
Je viens d'essayé, et ça marche niquel, quelque soit la longueur de la String !
Merci beaucoup a toi Julien39, on se verrais IRL je te paierais une bière pour toutes les fois ou tu m'as aidé :)

Bonne continuation
Commenter la réponse de H4rDBuG
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
246
0
Merci
Oui, ca fonctionne quel que soit la longueur de la chaine de caractères avant.

\\p{Space}-\\p{Space} signifie un espace (tabulation, espacement...) un tiret puis un autre espace.

Cette expression est recherchée dans la chaine de caractères et la chaine est découpée grâce à ce séparateur. Attention a ne pas ajour une ligne qui contient deux fois cet enchainement, dans ce cas, le nom sera tronqué.
Commenter la réponse de cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
246
0
Merci
Si tu veux en savoir un peu plus sur les expressions régulières, j'ai fait il y a un moment un tutoriel très simple, c'est vraiment la base : http://www.javafr.com/codes/EXPRESSIONS-REGULIERES-JAVA-DEBUTANT_53314.aspx
Commenter la réponse de cs_Julien39