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 :

Comment chercher un mot dans une chaîne de caractères


Sujet :

Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Comment chercher un mot dans une chaîne de caractères
    Je suis en train de réaliser un projet! Mon blocage est comment chercher un mot ou 2 ou plus dans une chaîne de caractère pour pouvoir exécuter une fonction. Par ex: " S1245 E6879 S7896 E1236" Voila notre chaîne de caractère dans la BD, notre travail est de trouver S et E à fin de déclencher une autre opération.

    Merci!

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Regardes la javadoc de la classe String et tu y trouveras toutes les méthodes dont tu as besoin.

    Par exemple, si ta chaîne est dans une variable appelée machaine, tu peux utiliser String.split(String regex) pour découper cette chaîne en plusieurs parties, puisqu'il semble que ces différentes parties soient toutes séparées par une espace entre elles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] parties = machaine.split(" ");
    Tu peux tester si une chaine commence par un caractère particulier en utilisant la méthode String.starsWith(String prefix) :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for(String partie : parties) {
        if ( partie.startsWith("S") ) {
           // faire ce qu'on veut si ça commence par S
        } else if ( partie.startsWith("E") ) {
           // faire ce qu'on veut si ça commence par E
        } else {
           // faire une gestion d'erreur ici (ça ne commence ni par S ni par E)
        }
    }
    Si tu as besoin de récupérer la partie qui suit la première lettre pour en faire un paramètre, par exemple, tu peux utiliser la méthode String.substring(int pos) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String param = partie.substring(1);
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre expérimenté

    Homme Profil pro
    Senior Développeur JEE
    Inscrit en
    Avril 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Senior Développeur JEE
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2002
    Messages : 795
    Points : 1 660
    Points
    1 660
    Par défaut
    Si la chaine de caractères a toujours la même forme, c'est à dire "chaine-espace vide-chaine-espace vide-chaine-espace vide-...", utiliser un String.split(), et ensuite boucler sur le tableau de chaines de caractères avec un startsWith(). Ou alors si le premier caractère est toujours la lettre que vous recherchez, utilisez un String.substring(0,1) avec un switch case

    Code java : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    public class TestString {
     
        private static final String str = "S1245 E6879 S7896 E1236";
     
        public TestString() {
            String[] splittedStr = TestString.str.split(" ");
            // Première méthode
            for (String string : splittedStr) {
                if (string.startsWith("S")) {
                    this.executeE(string);
                } else if (string.startsWith("E")) {
                    this.executeS(string);
                }
            }
     
            // Deuxième méthode
            for (String string : splittedStr) {
                switch (string.substring(0, 1)) {
                    case "E":
                        this.executeE(string);
                        break;
                    case "S":
                        this.executeS(string);
                        break;
                    default:
                        throw new UnsupportedOperationException("Caractère non pris en charge");
                }
            }
     
        }
     
        public static void main(final String args[]) {
            new TestString();
     
        }
     
        private void executeE(final String e) {
     
        }
     
        private void executeS(final String s) {
     
        }
     
    }

    EDIT: je me suis fait griller la politesse par Joel
    Langages : Java, SQL
    Outils : Eclipse, Intellij
    SGBD : Oracle, PostgreSQL
    Mes Articles

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Ok merci
    Je vais essayer. Merci pour vos infos

    Cordialement,

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut URGENT
    Salut,

    Merci de votre coopération, ça marche mais j'ai une autre question pour vous: considérons notre présente chaîne "S1245 E6879 S7896 E1236", l'opération est de trouver S et E ensemble pour exécuter une autre.

    Par ex:

    if on trouve "S" et "E";
    this.executeSE(string);

    Quel code peut-on prendre alors!

    Cordialement,

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Il suffit de parcourir l'ensemble des sous-chaines, et d'utiliser 2 booléens, initialisés à false : dès que tu trouves une chaine qui commence par S, tu mets le premier booléen à true, et dès que tu en trouves une qui commence par E, tu mets le second booléen à true. Dès que les 2 booléens sont à true, on est sûr qu'on a au moins un "Sxxxx" et un "Exxxx"...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(str.contains("S") && str.contains("E")) {...}
    EDIT:

    je pense que j'ai mal compris le besoin... ça devrait être mieux comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	public static void main(String[] args) {
    		String s = "S1245 E6879 S7896 E1236";
     
    		Pattern p = Pattern.compile("S{1}[0-9]{4} E{1}[0-9]{4}");			
    		Matcher m = p.matcher(s);
     
    		while(m.find()) {
    			String g = m.group();
    			System.out.println("Found: "+g);
    		}			
    	}
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Mr6 bcp2 pour vos aides
    ça marche petit à petit
    Cordialemnt,

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Slt,
    Revenons à notre exemple de chaîne de caractère précédente "S1245 E6879 S7896 E1236".
    En utilisant deux bolean, le programme marche si on recompile le système mais j’ai détecté un problème si on sélectionne successivement la table pour « getter » cette chaîne à fin de trouver S et E : il indique une fausse réponse. Pour clarifier la chose, S=Sud et E=Est, notre tâche de détecter S et E en même temps pour que le système print que ça vient du « SUD-EST ». Car notre 2ème chaîne regroupe une chaîne privé de « S » (WI E2126) cad que ça vient d’EST. Voici mon code :

    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
    19
    Bolean e, s= false
    
    private static final String str1 = "S1245 E6879 S7896 E1236";
    			                                    str2 = "WI E2126";
     
        public TestString() {
            String[] splittedStr = TestString.str.split(" ");
            for (String string : splittedStr) {
                if (string.startsWith("S")) {
                    s=true ;
                } else if (string.startsWith("E")) {
                    e=true ;
                }
            }if (s==true && e==true) ;
    // venant du « SUD EST » (1ère chaine)
    	}else if (e==true) ;
    //venant d'« EST » (2ème chaîne)
    }
    Est-ce-que qlq1 pourrait m’aider pour une autre piste ou remarque !

    Cordialement,

  10. #10
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Ta chaîne va être découpé en un tableau de chaîne à cause de ton split :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] splittedStr = TestString.str.split(" ");
    Cela va te donner deux String pour ton second exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    splittedStr =  {"WI", "E2126"};
    Or dans ce cas, tu va bien détecté le "E" qui commence l'un de test mots. Je ne vois donc pas le problème de détection que tu as.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Si je comprends bien, tu as des séries de plusieurs coordonnées dans ta chaîne. Ton code traite toutes les séries en même temps : donc, si tu as "S1234 E 1234 WI S1234" tu obtiens Sud-Est, Sud-Est au lieu de Sud-Est, Sud. Si tu es sûr d'avoir bien des couples qui se succèdent, il suffit de réinitialiser tes booléens chaque fois que tu as traité 2 éléments du tableau.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Slt,
    Oui si on cherche juste une lettre, ça marche bien. mais si on cherche deux lettre (S et E) qui se séparent par 1 espace (1ère chaine de caractère) ça ne marche pas si on sélectionne successivement 2 ou 3 lignes de notre table qui contient plusieurs chaîne de caractère.
    Ok je veux essayer votre piste joel!

    Cordialement,

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Salut,
    Je tiens à vous remercier de vos infos, ça marche !
    Juste une petite question, comment faire jTable en autoscroll. Ca ira pour le vertical mais pour l’horizontal, negatif. Est-ce-que quelqu'un à une idée !
    Merci, cordialement,

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/01/2013, 11h10
  2. [CS5] Comment dupliquer un mot dans une chaine de caractère
    Par dorsey dans le forum Flash
    Réponses: 0
    Dernier message: 31/10/2012, 11h04
  3. Colorer un mot dans une chaîne de caractéres
    Par eagle83 dans le forum Langage
    Réponses: 8
    Dernier message: 07/08/2009, 15h26
  4. [AC-2000] Comment filtrer des mots dans une chaine de caractères
    Par bionet dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 21/07/2009, 18h16

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