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 :

Découpage d'une chaine de caractères


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 87
    Par défaut Découpage d'une chaine de caractères
    Bonjour !

    J'aimerais pouvoir séparer une chaine de caractère de la manière suivante :
    soit une chaine de caractère du type "nom = bouh" ou "poids > 5" etc.
    j'aimerais découper cette chaine en trois valeurs :
    "nom" + "=" + "bouh" par exemple.
    Pour l'instant je sais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    stok = new StringTokenizer(selection,"="); 
    sel = new String[stok.countTokens()] ; 
    i = 0;
    while ( stok.hasMoreTokens() ){ 
      sel[i] = stok.nextToken();
      i++;
    }
    Le problème est donc que :
    1. je n'ai que "=" or je voudrais pouvoir avoir les valeurs "=" ">" "<" etc. sans avoir besoin de créer x stringTokenizer
    2. Je voudrais pouvoir enregistrer l'élément de séparation utilisé (les "=", etc)

    Est ce qu'une fonction le permet ?

    Merci et bonne journée !

    Cordialement,

    Misaki43

  2. #2
    Membre très actif
    Avatar de la.lune
    Homme Profil pro
    Directeur Technique
    Inscrit en
    Décembre 2010
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Comores

    Informations professionnelles :
    Activité : Directeur Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 548
    Par défaut
    Si tu es sûr qu'il y a de l'espace entre ta chaîne de caractère alors ton séparateur c'est cet espace car tu veux que le signe = soit inclut sur le tableau généré, mais si tu connais déjà le signe séparateur pourquoi tu veux avoir trois termes. Moi je te conseil d'utiliser la méthode split qui est simple à manipuler

    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
     
     
    String tabStr[]="nom = bouh".split(" ");
    //Il faut s'assurer qu'il y a de l'espace
    //Tu peux les afficher
    for(String chaine: tabStr) {//cette instruction pour JAVA 5 et plus
    System.out.println(chaine) 
    } 
     
    /*Cette instruction t'affichera:
     
    nom
    =
    bouh
     
      */
    Avec cette petite instruction tu as tabStr[0]="nom" tabStr[1]="=" tabStr[2]="bouh"


    Par contre si tu veux "=" pour séparateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String tabStr[]="nom=bouh".split("=");
    Là tu as tabStr[0]="nom" tabStr[1]="bouh"
    Par contre ici pour garder que les mots assures toi qu'il n y a pas dutout de l'espace entre les mot sinon tu aura ces espaces sur les mot, a moin que tu intègre tes espaces dans le séparateur comme ça split(" = ");

  3. #3
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Tu peux renseigner une liste de séparateurs de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] s = "first=second>third".split("[>=]");
    Tu auras en résultat 3 chaînes "first", "second", et "third" (mais tu perds les séparateurs).

    Pour la syntaxe "[>=]", c'est une expression régulière. Il y a des tutoriels à ce sujet dans les cours du site.

    C'est probablement ce qui répondra à ton besoin. En utilisant une expression plus complexe (avec des "groupes de capture"), tu pourras récupérer en un seul code les différents morceaux de chaîne qui t'intéressent.

    Voilà l'exemple que tu donnes. Dans le "pattern", les 3 groupes de parenthèses servent à récupérer respectivement la première partie de la chaîne, le séparateur ('>' ou '=') et la deuxième partie de la chaîne. Ces 3 éléments sont récupérés par le "matcher" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    String s = "first>second"
    Pattern p = Pattern.compile("(.+)([>=])(.+)");
    Matcher m = p.matcher(s);
    if (m.matches()) {
      String debut = m.group(1);
      String separateur = m.group(2);
      String fin = m.group(3);
    }
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  4. #4
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 87
    Par défaut
    Bonjour et merci pour vos réponses précises !

    @la.lune : Non je ne peux pas être sure qu'il y ait des espace, d'ailleurs une opération que j'ai effectué avant est d'enlever les espaces donc ça ne pourrait pas marcher, mais ce qu'à donné Cyberchouan correspond à ce dont j'ai besoin

    @Cyberchouan : ah merci, c'est bien ce dont j'avais besoin (le matcher)! Maintenant je vais être plus précise encore sur mon problème : mon but est de séparer des champs sql en fait de conditions de sélection :
    du coup je n'ai pas que des caractères de comparaisons ('<', '=', '>') mais aussi des chaines de caractères ("like", "<>", "between" etc).
    Du coup y a t'il moyen d'avoir des séparateurs en "chaines de caractères" ?

  5. #5
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Le tout est de comprendre ce que CyberChouan t'a donné.
    Cela se base sur un Pattern qui est une expression régulière.
    Les () permettent de "retenir" ce qui a été matché.

    Donc quand on écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Pattern.compile("(.+)([>=])(.+)")
    cela veut dire qu'on va matcher un premier groupe qui contient n'importe quelle suite de caractères, un deuxième groupe qui contient un caractère parmi les caractères > et =, et un troisième groupe qui contient n'importe quelle suite de caractères.
    Pour prendre aussi le mot between, on pourrait par exemple faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Pattern.compile("(.+)([>=]|between)(.+)")
    Voir http://www.vogella.com/articles/Java...s/article.html pour plus d'infos sur les expressions régulières.

    Attention cependant, si tu veux vraiment "découper" une instruction sql, c'est un peu plus compliqué que simplement faire du découpage de chaîne de caractère sur séparateur. Réfléchis par exemple à l'exemple de requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM MyTable WHERE description like '%between%'

  6. #6
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 87
    Par défaut
    ah merci, je ne savais pas comment ça marchait cette fois j'ai exactement ce que je veux

    Tu me mâches le travail en me donnant ce problème de "%between%" : merci j'y avais pas du tout pensé !

    EDIT : Je me suis renseignée pour ce probleme et j'ai utilisé l'argument "limit" que l'on peut mettre dedans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pattern pat = Pattern.compile("(.+)([>=]|between|like|<>)(.+)", 3);
    Le probleme est que pour une ligne du type : type=table=test
    J'obtiens : "type=table" "=" "test" donc ça marche pas dans le bon sens...

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/11/2013, 20h29
  2. Découpage d'une chaine de caractère
    Par malus56 dans le forum Débuter
    Réponses: 10
    Dernier message: 01/08/2011, 08h22
  3. Découpage d'une chaine de caractères
    Par geofnich dans le forum SAS Base
    Réponses: 5
    Dernier message: 06/05/2010, 11h28
  4. Découpage d'une chaine de caractères
    Par fab3131 dans le forum MFC
    Réponses: 2
    Dernier message: 08/04/2006, 16h46
  5. découpage d'une chaine de caractère
    Par lamojuli dans le forum ASP
    Réponses: 4
    Dernier message: 13/05/2004, 15h00

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