Je veux découper une phrase en mot...
Exemple : Mon chien est beau.
À mettre dans un tableau.
Mon
chien
est
beau
.
Des suggestions ?
Je veux découper une phrase en mot...
Exemple : Mon chien est beau.
À mettre dans un tableau.
Mon
chien
est
beau
.
Des suggestions ?
Il nous faudrait la définition de ce qu'est un mot... Je vois que le point est considéré comme un mot, donc on ne peut pas faire simplement un split() sur les espaces.
A priori Il faut construire une List<String> puis boucler sur les caractères de la String. Tant qu'on tombe sur des lettres, on les ajoute au mot qu'on est en train de lire. Quand on tombe sur autre chose qu'une lettre, on ajoute le mot en cours dans la liste, puis on en recommence un autre.
J'ai changé le nom de mon sujet.
Je veux maintenant vérifier si une phrase entrée au clavier est valide.
Pour être valide, elle doit contenir des espaces, être formée seulement de lettre et se terminer par un point.
J'avais fais quelque chose comme ceci mais sans succès. C'est pour valider si chaque charactère est une letre....
Et sinon dans l'ensemble, est-ce correct de mettre un Tokenizer dans do while ?
Merci
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 static String validerPhrase() { String phrase = null; int nbMots; boolean valide = true; do { System.out.println("Entrer une phrase"); phrase = LireString(); StringTokenizer str = new StringTokenizer(phrase); nbMots = str.countTokens(); if(!phrase.endsWith(".")) valide = false; if (nbMots < 2) valide = false; for(int i = 0; i < phrase.length() - 1; i++) { if(Character.isLetter(phrase.charAt(i)) == false); valide = false; } } while(valide == false); return phrase; }
Vu ton énoncé, tu n'as même plus besoin de découper ta phrases en mots.
Ton problème se résout très facilement avec une expression régulière:
Je te conseille de te renseigner sur les expressions régulières:
Code : Sélectionner tout - Visualiser dans une fenêtre à part phrase.matches("(?=.* )[A-Za-z ]+\\.");
(?=.* ) sert à vérifier qu'il y a au moins un espace.
[A-Za-z ]+ sert à s'assurer que la phrase est uniquement constituée de lettres et d'espace.
\\. sert à s'assurer que la phrase ce termine par point
Merci, je ne connaissais pas ça !
Sinon tu peux aussi utiliser un StringTokenizer :
Qui par défaut s'arrête dès la rencontre de " \t\r\n\f". Si t'as un autre déllimiteur, tu pourras toujours le signaler. Pour un slash tu mettras:
Code : Sélectionner tout - Visualiser dans une fenêtre à part StringTokenizer st=new StringTokenizer("ta chaîne");
Good Luck
Code : Sélectionner tout - Visualiser dans une fenêtre à part StringTokenizer st=new StringTokenizer("ta chaîne","/");![]()
Sauf que pour le coup le string StringTokenizer ne répond plus du tout au nouvel énoncé de son problème. Son but est seulement de découper une chaine.
D'ailleurs utiliser la méthode split() de la classe String est préférable au StringTokenizer.
Désolé UTHER, mais votre expression régulière n'est pas tout à fait correcte.
Pour préciser que la chaîne se termine par un '.', il faut écrire :
phrase.matches("(?=.* )[A-Za-z ]+\\.$");
Si, elle est correcte : car je utilise l'expression régulière avec matches() qui essaie d'applique le pattern a l'ensemble de la chaine.
Donc le "$" n'est pas nécessaire.
Je ne voudrai pas contredire pour le plaisir, mais sans le caractère $, si vous ajoutez des caractères derrière le '.', votre méthode matches renverra vrai alors que dans les objectifs du demandeur il était bien spécifié "... se termine par un '.' "
Donc, sans le $ on ne répond pas à cette exigence. Mais si on fait abstraction du fait que le '.' est ou n'est pas le dernier caractère de la phrase, c'est juste.
Voilà, c'est tout.
Allez, à bon entendeur, salut.
Si tu ne me crois pas essaie:
matches() vérifie que l'intégralité de la chaine correspond au pattern. Contrairement a un find() qui recherche un fragment de la chaine correspondant au pattern.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 String texte = "Texte non termine par point. truc"; String pattern = "(?=.* )[A-Za-z ]+\\."; System.out.println(texte.matches(pattern));
Ok, Uther. Merci d'avoir éclairé ma bougie, j'avais compris un truc de travers concernant l'utilisation des expressions régulières.
Personne a une idée pour rajouté le ! et ? à la fin d'une phrase
Ben tu remplacespar
Code : Sélectionner tout - Visualiser dans une fenêtre à part \\..
Code : Sélectionner tout - Visualiser dans une fenêtre à part [\\.\\?!]
Les \\ sont là pour considérer . et ? comme de simples caractères alors qu'ils ont une signification bien particulière en tant qu'expression régulière.
Je crois pas que ! en est une.
Je vous remercie.
J'ai tellement de problème avec les regex....
J'essayais ceci
\\.\\?\\!
héhé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 String texte = "Bienvenue à bord."; String pattern = "(?=.* )[A-Za-z ]+\\."; System.out.println(texte.matches(pattern)); texte = "Bienvenue dans l'enfer des expressions régulières!" ; //.....etc; etc.![]()
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