Menu

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

histl4000 130 Messages postés lundi 3 juillet 2017Date d'inscription 12 juillet 2018 Dernière intervention - 25 nov. 2017 à 14:45 - Dernière réponse : histl4000 130 Messages postés lundi 3 juillet 2017Date d'inscription 12 juillet 2018 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 

Votre réponse

9 réponses

Meilleure réponse
Whismeril 11789 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 juillet 2018 Dernière intervention - 25 nov. 2017 à 15:09
1
Merci
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


Merci Whismeril 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 22572 internautes ce mois-ci

Commenter la réponse de Whismeril
Meilleure réponse
KX 15628 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 18 juillet 2018 Dernière intervention - 25 nov. 2017 à 15:44
1
Merci
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

Merci KX 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 22572 internautes ce mois-ci

histl4000 130 Messages postés lundi 3 juillet 2017Date d'inscription 12 juillet 2018 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 15628 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 18 juillet 2018 Dernière intervention > histl4000 130 Messages postés lundi 3 juillet 2017Date d'inscription 12 juillet 2018 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 130 Messages postés lundi 3 juillet 2017Date d'inscription 12 juillet 2018 Dernière intervention > KX 15628 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 18 juillet 2018 Dernière intervention - 25 nov. 2017 à 16:17
Merci beaucoup, cela fonctionne très bien
Commenter la réponse de KX
histl4000 130 Messages postés lundi 3 juillet 2017Date d'inscription 12 juillet 2018 Dernière intervention - 25 nov. 2017 à 15:18
0
Merci
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 130 Messages postés lundi 3 juillet 2017Date d'inscription 12 juillet 2018 Dernière intervention - Modifié par histl4000 le 25/11/2017 à 15:22
0
Merci
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 11789 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 juillet 2018 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 130 Messages postés lundi 3 juillet 2017Date d'inscription 12 juillet 2018 Dernière intervention > Whismeril 11789 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 juillet 2018 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