Java-découpage de String
Aethan
-
Aethan -
Aethan -
Bonjour,
Pour les besoins d'un programme qui va traiter des phrases entrées au clavier par l'utilisateur ("Si tu as le temps, tu peux venir avec moi." par exemple). J'aurai besoin de récupérer chaque mot et aussi les signes de ponctuation ( la virgule "," et le point "." dans la phrase d'exemple) pour pouvoir les traiter ultérieurement.
J'ai regardé la classe StringTokenizer qui semble correspondre à mes besoins, mais on a l'air de pouvoir lui donner qu'un seul type de délimitateur. Comme je lui demande au minimum comme délimitateur l'espace, je récupère comme mot "temps," au lieu de récupérer "temps" puis ",". De même à la fin de la phrase je récupère la String "moi." au lieu de "moi" puis "." .
Faut-il mieux que je crée de toute pièce un objet plus puissant que le StringTokenizer de base admettant plusieurs types différents de délimitateurs, ou alors je repasse sur chaque mot renvoyé avec un StringTokenizer configuré pour séparer les signes de ponctuation des mots? Dans ce dernier cas, ça implique certainement de devoir passer chaque mot à travers un série de StringTokenizer configurés chacun pour un type de ponctutation : un pour le point, l'autre pour la virgule, le point virgule, le point d'interrogation...
En vous remerciant par avance
Pour les besoins d'un programme qui va traiter des phrases entrées au clavier par l'utilisateur ("Si tu as le temps, tu peux venir avec moi." par exemple). J'aurai besoin de récupérer chaque mot et aussi les signes de ponctuation ( la virgule "," et le point "." dans la phrase d'exemple) pour pouvoir les traiter ultérieurement.
J'ai regardé la classe StringTokenizer qui semble correspondre à mes besoins, mais on a l'air de pouvoir lui donner qu'un seul type de délimitateur. Comme je lui demande au minimum comme délimitateur l'espace, je récupère comme mot "temps," au lieu de récupérer "temps" puis ",". De même à la fin de la phrase je récupère la String "moi." au lieu de "moi" puis "." .
Faut-il mieux que je crée de toute pièce un objet plus puissant que le StringTokenizer de base admettant plusieurs types différents de délimitateurs, ou alors je repasse sur chaque mot renvoyé avec un StringTokenizer configuré pour séparer les signes de ponctuation des mots? Dans ce dernier cas, ça implique certainement de devoir passer chaque mot à travers un série de StringTokenizer configurés chacun pour un type de ponctutation : un pour le point, l'autre pour la virgule, le point virgule, le point d'interrogation...
En vous remerciant par avance
A voir également:
- Java-découpage de String
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Eclipse java - Télécharger - Langages
3 réponses
Désolé il y a un petit problème:
String unePhrase = "Si tu as le temps, tu peux venir avec moi.";
String unePhrase2 = unePhrase.replaceAll(",", " ,");
System.out.println("la phrase : " + unePhrase);
//unePhrase2 = unePhrase.replaceAll("\\.", " \\."); ligne remplacée par la ligne suivante
unePhrase2 = unePhrase2.replaceAll("\\.", " \\.");
System.out.println("la phrase : " + unePhrase);
StringTokenizer chaine;
chaine = new StringTokenizer(unePhrase2);
while (chaine.hasMoreTokens()) {
String tok = chaine.nextToken(); // stocker par exemple dans un tableau
System.out.println("tok = " + tok);
}
Cordialement,
Dan
String unePhrase = "Si tu as le temps, tu peux venir avec moi.";
String unePhrase2 = unePhrase.replaceAll(",", " ,");
System.out.println("la phrase : " + unePhrase);
//unePhrase2 = unePhrase.replaceAll("\\.", " \\."); ligne remplacée par la ligne suivante
unePhrase2 = unePhrase2.replaceAll("\\.", " \\.");
System.out.println("la phrase : " + unePhrase);
StringTokenizer chaine;
chaine = new StringTokenizer(unePhrase2);
while (chaine.hasMoreTokens()) {
String tok = chaine.nextToken(); // stocker par exemple dans un tableau
System.out.println("tok = " + tok);
}
Cordialement,
Dan
Personnellement à ta place je stockerais les résultats de ton tokenizer par les espace dans un tableau de String.
Ensuite il te reste juste à comparer le dernier charactere de chaque mot de ton tableau avec un tableau de charactere ou tu aurais mis l'ensemble des ponctuation que tu veux extraire. Quand ca correspond tu le retires du mot et tu le stock à part.
Ensuite il te reste juste à comparer le dernier charactere de chaque mot de ton tableau avec un tableau de charactere ou tu aurais mis l'ensemble des ponctuation que tu veux extraire. Quand ca correspond tu le retires du mot et tu le stock à part.
Salut,
Tu peux essayer comme ci-dessous:
String unePhrase = "Si tu as le temps, tu peux venir avec moi.";
String unePhrase2 = unePhrase.replaceAll(",", " ,");
System.out.println("la phrase : " + unePhrase);
unePhrase2 = unePhrase.replaceAll("\\.", " \\.");
System.out.println("la phrase : " + unePhrase);
StringTokenizer chaine;
chaine = new StringTokenizer(unePhrase2);
while (chaine.hasMoreTokens()) {
String tok = chaine.nextToken(); // stocker par exemple dans un tableau
System.out.println("tok = " + tok);
}
Cordialement,
Dan
Tu peux essayer comme ci-dessous:
String unePhrase = "Si tu as le temps, tu peux venir avec moi.";
String unePhrase2 = unePhrase.replaceAll(",", " ,");
System.out.println("la phrase : " + unePhrase);
unePhrase2 = unePhrase.replaceAll("\\.", " \\.");
System.out.println("la phrase : " + unePhrase);
StringTokenizer chaine;
chaine = new StringTokenizer(unePhrase2);
while (chaine.hasMoreTokens()) {
String tok = chaine.nextToken(); // stocker par exemple dans un tableau
System.out.println("tok = " + tok);
}
Cordialement,
Dan
Voilà le bout de code qui m'intéressait :
StringTokenizer decoupeur = new StringTokenizer(String s," .?!,:;&()[]'",true);
nbmot = decoupeur.countTokens();
phrase = new String[nbmot][2];
int j = 0;
while(j<nbmot){phrase[j][0] = decoupeur.nextToken(); j++;}
En fait il fallait donner une liste des délimiteurs que je souhaitais à StringTokenizersous la forme d'une String, " .?!,:;&()[]'" dans le cas présenté. En mettant true comme troisième paramètre, StringTokenizer me renvoie à chaque fois qu'il les rencontres les espaces, les . , les ?, les !, etc.
Le gros soucis de compréhension que j'ai eu portais sur cette string, je pensais que StringTokenizer l'interpréterais comme un UNIQUE délimitateur 'un peu tordu, certes), et pas comme la liste des délimitateurs que je désirais (les signes de ponctuation et espace).