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

Collection et Stream Java Discussion :

Découpage de chaine avec conservation des séparateurs


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Par défaut Découpage de chaine avec conservation des séparateurs
    Bonjour à tous,

    voilà j'ai besoin de couper une chaîne en plusieurs morceaux mais en conservant le séparateur dans les morceaux.

    exemple :

    ma chaîne : "soit {nomVariable} étant un {Objet}"
    résultat attendu : ["soit ", "{nomVariable}"," étant un ","{Objet}"]
    les séparateurs étant les crochets {}.

    J'ai essayé plusieurs solutions (split, StringTokenizer ...) mais je n'arrive qu'à avoir ["soit ", "nomVariable"," étant un ","Objet"]

    Quelqu'un aurait-il une idée ?

    Merci d'avance,

    Vincent

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    Il suffit de se faire ta propre méthode de séparation en utilisant indexOf('{') et indexOf('}').

    Tu recherche le '{', si tu le trouves tu cherches le '}' le plus proche, tu fais un substring et tu recommences pour la suite de la chaine.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Par défaut
    Salut,

    c'est ce que je voulais éviter mais si aucune méthode dans la jdk 1.5 ne le permet c'est ce que je vais faire.

    merci,

    Vincent

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    tu peux utiliser les expressions régulières sinon mais je ne les maîtrise pas assez pour trouver la solution ... je te file quand même le bout de code que je viens de tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String chaine = "ceci {variable} est ma {variable2} chaine";
    List res = findVars(chaine);
    System.out.println(res);
    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
     
    @SuppressWarnings("unchecked")
    public static List findVars(String input) {
    		Pattern p = Pattern.compile("\\{.*\\}");
    		Matcher m = p.matcher(input);
    		List list = new ArrayList();
    		if (m.find()) {
    			do {
    				list.add(m.group());
     
    			} while (m.find());
    			return list;
    		}
    		return null;
    }
    qui pour le moment renvoit :
    [{variable} est ma {variable2}]
    Il faut donc trouver la regex qui défini "commencer par { et se termine par le premier } trouvé"

  5. #5
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Bonjour.
    C'est pas la solution du problème en question, mais juste pour info:
    le "*" des RegExp est par défaut "gourmand" (greedy), càd que "{.*} dans une chaine comme "{variable} est ma {variable2}" va matcher toute cette chaine, y compris le premier "}" rencontré.
    OPn peut rémedier à cela en ajoutant "?" après le *, ce qui donne {.*?} ce qui permettre de s'arreter dès le premier "}" trouvé.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    Merci djo.mos, ça me sera utile à moi aussi et même si ce n'est pas la solution du problème, avec l'utilisation des Patterns et ta note, il devrait pouvoir s'en sortir sans trop de problèmes

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

Discussions similaires

  1. Remplacer les blocks avec conservations des paramètres
    Par yamin69 dans le forum Simulink
    Réponses: 2
    Dernier message: 22/04/2013, 14h43
  2. Réponses: 5
    Dernier message: 06/07/2011, 01h50
  3. Découper une chaine séparée par des séparateur ;
    Par d.tellier dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 23/12/2010, 19h21
  4. [JDOM] Suppression de noeud avec conservation des fils
    Par Carabi dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 16/03/2009, 22h14
  5. [VB.NET] Compléter une chaine avec des espaces
    Par Lois dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/03/2005, 10h09

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