Afficher les mots d'une certaine longueur [Résolu]

histl4000 83 Messages postés lundi 3 juillet 2017Date d'inscription 13 décembre 2017 Dernière intervention - 25 nov. 2017 à 14:45 - Dernière réponse : histl4000 83 Messages postés lundi 3 juillet 2017Date d'inscription 13 décembre 2017 Dernière intervention
- 25 nov. 2017 à 17:23
Bonjour,

J'aimerai afficher les mots d'une longueur de trois par exemple.
Voici la phrase exemple :
String phrase = "jess j6ess ça ca s( ! ?";

Le resultat attendu serai -> jess j6ess

J'arrive a supprimer certains mot avec ma méthode mais pas les caractères spéciaux.
texte = texte.replaceAll("\\b\\w{1,3}\\b\\s?", "");

resultat -> jess j6ess ça ( ! ?

Donc le mot "ça", "(", "!", "?" sont en trop.
Pouvez-vous m'aider ? merci




Afficher la suite 

9 réponses

Répondre au sujet
Whismeril 10526 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - 25 nov. 2017 à 15:09
+1
Utile
Bonjour

déjà dans ton texte exemple, y'a pas de mot de longueur égale à 3, donc cherches longueur supérieure ou égale à 3?
Ensuite, tu cherches à faire l'inverse de ce que tu expliques, c'est à dire
J'aimerai afficher les mots
et le code que tu montres essayes d'effacer des parties de texte.
Il me semble à la fois plus simple et plus logique à code d'extraire les mots, et de traiter l'extraction
voilà un exemple qui extrait les mots de longueur 3 ou plus, sans les espaces, ponctuation, etc...
http://regexstorm.net/tester?p=%28%3f%3c%3d%5cb%29%5cw%7b3%2c%7d%28%3f%3d%5cb%29&i=jess+j6ess+%c3%a7a+ca+s%28+!+%3f123.+Coucoucoucoucocuocucoucoucou%2c


Commenter la réponse de Whismeril
KX 15088 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 25 nov. 2017 à 15:44
+1
Utile
3
Bonjour,

Un exemple :

import java.util.stream.Stream;

Stream.of(phrase.split(" "))
    .filter(s -> s.length() >= 3)
    .forEach(System.out::println);

Ce qui donne :
jess
j6ess
histl4000 83 Messages postés lundi 3 juillet 2017Date d'inscription 13 décembre 2017 Dernière intervention - 25 nov. 2017 à 16:06
Bonjour,
Est-ce qu'il y aura moyen de mettre Stream.of(phrase.split(" ")).filter(s -> s.length() >= 3);
dans une variable de type String ?

Car j'ai vraiment besoin de le faire à l'aide d'une variable string pour l'écrire sur un texte avec "append".
KX 15088 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention > histl4000 83 Messages postés lundi 3 juillet 2017Date d'inscription 13 décembre 2017 Dernière intervention - 25 nov. 2017 à 16:12
Oui, il suffit de remplacer l'opération finale (où je fais le println) par un collecteur :

String result = Stream.of(phrase.split(" "))
        .filter(s -> s.length() >= 3)
        .collect(Collectors.joining(" "));

Ce qui donne :
jess j6ess
histl4000 83 Messages postés lundi 3 juillet 2017Date d'inscription 13 décembre 2017 Dernière intervention > KX 15088 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 25 nov. 2017 à 16:17
Merci beaucoup, cela fonctionne très bien
Commenter la réponse de KX
histl4000 83 Messages postés lundi 3 juillet 2017Date d'inscription 13 décembre 2017 Dernière intervention - 25 nov. 2017 à 15:18
0
Utile
Merci de m'avoir répondu. Oui, je me suis mal exprimé. Je voulais dire que je voulais récupérer et afficher les mots de longueur 3 ou plus.
Commenter la réponse de histl4000
histl4000 83 Messages postés lundi 3 juillet 2017Date d'inscription 13 décembre 2017 Dernière intervention - Modifié par histl4000 le 25/11/2017 à 15:22
0
Utile
2
Je pensais supprimer les mots < 3 puis les afficher. Par contre, je ne comprends pas très bien la solution que vous m'avez donné ? Donc en essayant le code : texte.replaceAll("(?<=\\b)\\w{3,}(?=\\b)", "");
j'ai comme résultat: ça ca s( ! ?
Whismeril 10526 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - 25 nov. 2017 à 17:06
Oui, parce que tu cherches à effacer au lieu d’extraire.....
Ce que je t’ai proposé est de te servir des captures, pas de faire un replace.

D’un autre côté la solution de KX est bien aussi.
histl4000 83 Messages postés lundi 3 juillet 2017Date d'inscription 13 décembre 2017 Dernière intervention > Whismeril 10526 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - 25 nov. 2017 à 17:23
Oui, je m'en suis rendu compte par après. Je ne connaissais pas le site que vous m'avez envoyer. Il pourra me servir plus tard. Merci.
Commenter la réponse de histl4000