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

Signaler
Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018
-
Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018
-
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




4 réponses

Messages postés
16035
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 juin 2021
708
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


1
Merci

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

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021
2 845
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
1
Merci

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

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018
2
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".
Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021
2 845 >
Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018

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
Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018
2 >
Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021

Merci beaucoup, cela fonctionne très bien
Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018
2
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.
Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018
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( ! ?
Messages postés
16035
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 juin 2021
708
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.
Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018
2 >
Messages postés
16035
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 juin 2021

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.