Afficher les mots d'une certaine longueur

Résolu
histl4000 Messages postés 140 Statut Membre -  
histl4000 Messages postés 140 Statut Membre -
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

  1. Utilisateur anonyme
     
    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
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
    1. histl4000 Messages postés 140 Statut Membre 3
       
      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
      1. KX Messages postés 19031 Statut Modérateur 3 020 > histl4000 Messages postés 140 Statut Membre
         
        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
      2. histl4000 Messages postés 140 Statut Membre 3 > KX Messages postés 19031 Statut Modérateur
         
        Merci beaucoup, cela fonctionne très bien
        0
  3. histl4000 Messages postés 140 Statut Membre 3
     
    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
  4. histl4000 Messages postés 140 Statut Membre 3
     
    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
    1. Utilisateur anonyme
       
      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
      1. histl4000 Messages postés 140 Statut Membre 3 > Utilisateur anonyme
         
        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