IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

expressions régulières et multiples caractères espace


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 60
    Points : 27
    Points
    27
    Par défaut expressions régulières et multiples caractères espace
    bonjour !

    J'ai un problème pour lequel je bloque.
    Il s'agit d'un mini-projet qui consiste à demander à l'utilisateur d'entrer une phrase. Puis le programme affiche les mots de cette phrase dans un ordre pris au hasard.


    Je souhaiterais d'abord créer une fonction qui compte le nombre de mots que contient une chaine de caractères (la phrase). Ainsi, je crée un tableau (de String) contenant une dimension égale au nombre de mots. Je mets dans chacun des éléments du tableau, un mot. Puis, grâce à la méthode random() de la classe Math, j'affiche les mots au hasard.

    Pour créer cette fonction qui compte le nombre de mots, j'ai pensé qu'il suffisait de compter le nombre de fois où l'on trouve le caractère espace. par exemple n. Le nombre de mot serait alors égal à n + 1.

    Puis je me suis rendu compte que si l'utilisateur du programme avait par erreur frappé 2 fois le caractère espace, cela fausserait ma fonction.

    Au téléphone, un ami m'a dit qu'il pense qu'il faut utiliser les expressions régulières. C'est à dire, transformer toutes les chaines de caractères composées que de caractères espace, en un seul caractère espace.
    Problème, il a du mal à piger les expressions régulières même s'il a compris ce qu'il faut faire.

    Moi, je n'ai jamais étudié les expressions régulières. Il faut que je m'y mette.

    En attendant, je souhaiterais que vous m'aidiez à transformer les multiples caractères espace en un seul.

    Merci d'avance !

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Bien vu le coup des expressions régulières.
    Essaie ça par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String phrase = " Test du   nombre de  mots ! ";
    phrase = phrase.trim();
    String[] tab = phrase.split("(\\s)+");

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 60
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par fr1man Voir le message
    Bien vu le coup des expressions régulières.
    Essaie ça par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String phrase = " Test du   nombre de  mots ! ";
    phrase = phrase.trim();
    String[] tab = phrase.split("(\\s)+");
    Merci c'est très gentil !

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Une autre solution serait de prendre le problème à l'envers : plutôt que de découper selon un séparateur, on peut tout simplement rechercher les mots, c'est à dire les suites de lettres contenant éventuellement un tiret ou une quote... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	Pattern pattern = Pattern.compile("\\p{L}[\\p{L}-']*"); // lettres + tiret + apostrophe
    	Matcher matcher = pattern.matcher(phrase);
    	List<String> list = new ArrayList<String>();
    	while (matcher.find()) {
    		list.add(matcher.group());
    	}
    	System.out.println(list);
    a++

  5. #5
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 489
    Points
    15 489
    Par défaut
    Citation Envoyé par fr1man Voir le message
    Bien vu le coup des expressions régulières.
    Essaie ça par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String phrase = " Test du   nombre de  mots ! ";
    phrase = phrase.trim();
    String[] tab = phrase.split("(\\s)+");
    Ça devrait bien fonctionner, mais les parenthèses sont inutiles.

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/07/2012, 17h37
  2. Expressions régulières : conditions sur caractères avant/après
    Par NicoV dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 27/05/2011, 10h45
  3. Réponses: 4
    Dernier message: 28/06/2009, 19h09
  4. [RegEx] Expression régulière sur des caractères alphanumériques
    Par hash95 dans le forum Langage
    Réponses: 3
    Dernier message: 16/01/2008, 17h26
  5. Réponses: 2
    Dernier message: 10/11/2006, 11h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo