Afficher les mots d'une certaine longueur

Résolu/Fermé
histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018 - 25 nov. 2017 à 14:45
histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018 - 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




4 réponses

Whismeril Messages postés 19017 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 13 avril 2024 926
25 nov. 2017 à 15:09
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
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
25 nov. 2017 à 15:44
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
histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018 3
Modifié le 25 nov. 2017 à 16:10
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".
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018
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
0
histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018 3 > KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024
Modifié le 25 nov. 2017 à 16:25
Merci beaucoup, cela fonctionne très bien
0
histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018 3
25 nov. 2017 à 15:18
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.
0
histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018 3
Modifié le 25 nov. 2017 à 15:22
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( ! ?
0
Whismeril Messages postés 19017 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 13 avril 2024 926
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.
0
histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018 3 > Whismeril Messages postés 19017 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 13 avril 2024
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.
0