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

Java Discussion :

Manipulation d'une chaîne de caractères


Sujet :

Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 9
    Points : 9
    Points
    9
    Par défaut Manipulation d'une chaîne de caractères
    Bonsoir,

    Je voulais savoir si y avait une méthode qui permet de savoir si dans une chaine de caractère il y a présence de chiffre.
    (Je programme un jeu de pendu sur console)

    Voici mon code de sous programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public static boolean ContientChiffre (Mot m) // Class Mot
        {
            int i =0;
            boolean estPresent = false;
     
            while ( i < m.mot.length() ) // m.mot est type String.
            {
                if (Character.isDigit(m.mot.charAt(i)) == true)
                {
                    estPresent = true;
                }
                i++;
            }
     
            return estPresent;
        }
    PS : débutant en java et en 1re Année de Licence info.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Bonjour,

    La réponse courte mais que je n'aime pas vraiment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public static boolean ContientChiffre (Mot m) // Class Mot
    {
    return m.mot.matches(".*\\d.*");
    }
    Je n'aime pas car ça va à l'encontre de l'orienté objet... Pourquoi tu ne crées pas une méthode contientChiffre() dans ta classe Mot ? Je te propose la solution suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
     
     
    public class Mot {
     
      private String mot;
      /** Expression régulière permettant de déterminer si une chaine contient un chiffre */
      private static final String CHIFFRE = ".*\\d.*";
     
      public Mot(String mot){
        this.mot = mot;
      }
     
      public boolean contientChiffre(){
        return mot.matches(CHIFFRE);
      }
    }
    ce qui te permet d'écrire du code lisible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(mot.contientChiffre()){
     
    }else{
     
    }
    Romain.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    j'avais un soupcon que je pouvais utiliser les methodes que tu as proposés mais je ne savais pas comment les manipuler ,vu mon niveau de connaissance en java et mon niveau d'anglais j'ai encore du chemin.

    je te remercie .

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    N'oublie pas de passer le sujet en résolu

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 630
    Points
    21 630
    Par défaut
    Citation Envoyé par rg77140 Voir le message
    Je n'aime pas car ça va à l'encontre de l'orienté objet...
    Nope. Chercher s'il y a un chiffre ou non n'est pas dépendant de la nature de l'objet. Ça s'applique à toute String. Ça a sa place dans une méthode static utilitaire.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Bonjour,

    Sauf que sa méthode "utilitaire" prend une classe Mot (classe qui contient un string) en paramètre et que sa méthode n'est donc pas "utilitaire" puisqu'elle ne peut s’appliquer qu'à la classe Mot... Donc si elle ne peut s'appliquer qu'à la classe mot il n'y a pas d'intérêt à créer une classe MotUtils, autant mettre la méthode dans la classe Mot.

    Par contre qu'il créé une classe StringUtils avec une méthode qui lui permette de déterminer si un String contient un chiffre, ça c'est de l'utilitaire, car c'est réutilisable dans tous ses objets métiers qui contiendront un String.

    Je ne parle pas du fait que l'attribut "mot" dans sa classe "Mot" n'était pas private et que ça va à l'encontre de l'encapsulation :
    Romain.

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 630
    Points
    21 630
    Par défaut
    Soit, mais ce n'est pas une question d'orienté objet. Juste une question de pas créer encore une nouvelle classe juste pour y ranger une méthode.

    (Les problèmes d'encapsulation, par contre, ça c'en est une, oui.)

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Disons que ça va à l'encontre de l'orienté objet car il expose l'intérieur de son objet Mot alors que ce n'est pas nécessaire...

    Tu ne récupères pas le tableau de char contenu dans un String pour voir s'il match un certain pattern ? tu appelles directement matches sur ton objet String pour savoir s'il match un certain pattern...

    Là c'est pareil, tu n'as pas à demander à Mot son contenu pour le faire analyser par une autre classe, qu'elle soit "utilitaire" ou non. Demande directement à Mot s'il contient un numéro ou non...

    C'est le principe du "Tell don't ask" :
    It is okay to use accessors to get the state of an object, as long as you don't use the result to make decisions outside the object. Any decisions based entirely upon the state of one object should be made 'inside' the object itself.
    Exemple : http://www.tzavellas.com/techblog/20...tell-dont-ask/

    Romain.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    j'avais oublié de préciser que je n'ai pas réellement vu l'objet etant que débutant. Pour l'instant on nous apprend à utiliser des classes seulement avec des attributs ou propriétés.

    En tout cas encore une fois merci rg.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Manipuler une chaîne de caractères
    Par joffrey575 dans le forum C++
    Réponses: 3
    Dernier message: 10/04/2015, 14h25
  2. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  3. Réponses: 3
    Dernier message: 17/08/2011, 14h40
  4. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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