Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème récupération de chaine de caractères

    17 avril 2012 à 9:27:28

    Bonjour à tous ;)

    Voila cela fias une semaine maintenant que je suis en stage en entreprise et la tâche qu'il m'est confié est la création d'un moteur de calcul visant a optimiser les calcul d'une BDD.

    Il faut donc créer un arbre de dépendance entre les variable. Chaque variable est stocké dans la BDD. La dépendance de cette variable par une autre est caractérisé par des (diez)#.


    Exemple : Je vous #explique# mon #problème#

    Les variables pères de cet exemples sont donc "explique" et "problème".

    L'arbre est créer, je n'arrive tout simplement pas à récupérer ces variables et a les concaténés comme ceci :

    "explique,probleme"

    Voila, auriez-vous des idées ?

    Merci d'avance ;) , Gaius.
    • Partager sur Facebook
    • Partager sur Twitter
      17 avril 2012 à 10:04:22

      Ce sont des String donc l'opérateur d'addition marche.

      EX :

      String a = "explique", b = "probleme"
      String result = a + "," + b;

      • Partager sur Facebook
      • Partager sur Twitter
        17 avril 2012 à 10:11:23

        Merci pour ta réponse,

        Pour l'opérateur de concaténation, je le sais je te rassures ;) .

        Le problème est de récupérer un père, l'enlever pour ne pas retomber dessus au prochain tour... ainsi de suite.
        • Partager sur Facebook
        • Partager sur Twitter
          17 avril 2012 à 10:20:08

          Tu peux utiliser les méthodes de la classe String, notamment indexOf(String str, int fromIndex), startsWith(String prefix, int toffset) et substring(int beginIndex, int endIndex).

          Dans ton cas étant donné qu'il peut y avoir plusieurs variables dans une chaîne de caractères ce sera peut être plus rapide en utilisant les expressions régulières (Pattern, Matcher...).
          • Partager sur Facebook
          • Partager sur Twitter
          ⚙️ Une solution simple règle le problème ; une solution compliquée en crée un nouveau.
            17 avril 2012 à 10:31:31

            Oui c'est également ce que je me suis dit.

            J'ai un peu avancer dans mon problème. J'ai choisi de les stocker dans un ArrayList question de simplicité.

            Mais ce choix est-il justifié question optimisation ?


            String aParser="arrondit(([ref_lum_nse.#lampe#prix_vente_#lampe#pro*grp_lum_exist.nombre*src_#lampe#lum_exist.nombre]#hello#), 2)";
                    ArrayList<String> listeVariable = new ArrayList<String>();
                    String pere="";
                    
                    while(aParser.indexOf("#")>-1){
                    
                     int fin= aParser.lastIndexOf("#");
                     int debut = aParser.substring(0,fin-1).lastIndexOf("#");
                    
                     String variable = aParser.substring(0,debut-1);
                     
                     aParser=aParser.substring(debut-1,fin+1);
                    
                              Pattern p=Pattern.compile("#.*#");
                              Matcher m=p.matcher(aParser);
                            
                            while(m.find()){
                            pere =String.valueOf(m.group(0));
                            listeVariable.add(pere.replaceAll("#", ""));
                            }
                            
                      aParser=variable;
                    }
                    
                    for(int i=0;i<listeVariable.size();i++){
                      System.out.println(String.valueOf(listeVariable.get(i)));
                    }
            
            • Partager sur Facebook
            • Partager sur Twitter
              17 avril 2012 à 10:52:13

              Bonjour,

              As-tu essayé "StringTokenizer" ? Je ne sais pas si ça peux t'aider, mais elle te permet de split tes String avec un caractère de séparation et elle te met tout dans un tableau.

              Mais en parlant de Split, tu as aussi cette fonction qui te permet de découper ta chaine.

              String str = "Les ninja #c'est# trop #beau# lololol";
              String[] tokens = st1.split("#");
              


              tokens[1] = "Les ninja "
              tokens[2] = "c'est"
              tokens[3] = " trop "
              tokens[4] = "beau"
              tokens[4] = " lololol"

              bon dans ton cas je ne pense pas que ce soit utile en faite.
              Enfin si ça peut.

              Sinon pour la question d'Arraylist ça t'offre plein de fonction sympa.
              Si t'en a l'utilité pourquoi pas. Sinon un tableau string tout bête fait l'affaire.
              • Partager sur Facebook
              • Partager sur Twitter
                17 avril 2012 à 11:07:31

                Plus propre :
                String aParser="arrondit(([ref_lum_nse.#lampe#prix_vente_#lampe#pro*grp_lum_exist.nombre*src_#lampe#lum_exist.nombre]#hello#), 2)";
                ArrayList<String> listeVariable = new ArrayList<String>();
                		
                Pattern p=Pattern.compile("#([^#]*)#");
                Matcher m=p.matcher(aParser);
                while(m.find()){
                	String pere =m.group(0);
                	listeVariable.add(pere);
                }
                
                for(int i=0;i<listeVariable.size();i++){
                	System.out.println(listeVariable.get(i));
                }
                


                PS : String.valueOf sur un String ...
                • Partager sur Facebook
                • Partager sur Twitter
                  17 avril 2012 à 11:33:30

                  En effet Olivier, les substring() n'ont pus lieu d'être avec Pattern/Matcher. Merci ;)$


                  De plus, cela résous mon problème ou si le # était en première ou dernière position... Donc c'est tout bénèf ;) !
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 avril 2012 à 11:46:14

                    L'avantage d'une List c'est que tu peux ajouter/supprimer des éléments dynamiquement, ce qui n'est pas possible dans un tableau.
                    Maintenant niveau rapidité je ne sais pas trop ce que ça vaut, je pense que depuis que les listes ne sont plus automatiquement synchronisées par Java, la différence de performances est minime.

                    Au pire tu peux toujours comparer si tu t'y connais un peu en Thread, ou chercher sur Google il doit y a voir pas mal de topics là-dessus.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    ⚙️ Une solution simple règle le problème ; une solution compliquée en crée un nouveau.

                    Problème récupération de chaine de caractères

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown