Nombre d’occurrences, expressions régulières

sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 - 27 sept. 2012 à 17:42
 Utilisateur anonyme - 2 oct. 2012 à 23:09
Bonjour, voilà mon soucis:

j'ai donc 1 champs EditText qui doit contenir plusieurs infos séparées par des ",".
Je dois donc d'abord savoir combien il y a de virgules, puis éclater la String obtenue en fonction de ce nombre.

J'essai d'utiliser indexOf mais j'ai quelques problèmes ^^

passi = monEditText.getText().toString();
int z=0;while(passi.indexOf (",") != -1);z++;   // je comprend: tant qu'il reste des virgules j'incrémente le z


Je devrais connaitre le nombre de virgule, mais même s'il n'y en a pas z=1 et s'il y en a je tombe dans une boucle infinie qui stoppe l'application !

Une fois que je connaitrai ce chiffre z, j'utiliserai StringTokenizer puis la fonction split() semble poser quelques problèmes sous Android.

StringTokenizer tokens = new StringTokenizer(passi, ",");
String [] zap = new String [z];
for(i=0;i<z;i++)zap[] = tokens.nextToken();


Avez-vous des idées ?
Merci d'avance


Signé Sagat

6 réponses

sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 1
27 sept. 2012 à 17:52
Ooops, petite erreur dans ma boucle for :

for(int i=0; i<z; i++)zap[i] = tokens.nextToken();



Signé Sagat
0
sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 1
27 sept. 2012 à 18:20
Salut, j'ai finalement trouvé la solution, c'était bidon ^^

int z=0;int jox=0;
while(passi.indexOf (",",jox) != -1){z++;int jax=passi.indexOf(",",jox);jox=jax+1;}


Voilà, merci et désolé pour ceux qui aurait perdu leur temps pour rien.

Signé Sagat
0
Utilisateur anonyme
28 sept. 2012 à 20:38
Salut,

Pour avoir le nombre de virgules tu pouvais faire:

            int z = 0;
            Pattern p = Pattern.compile(",");
            Matcher matcher = p.matcher(passi);
            while(matcher.find())
            {
               z++;
            }
            System.out.println("Nombre de virgules: " + z);



Ou éclater directement:

            int z = 0;
            Pattern p = Pattern.compile(",");
         // éclater passi en sous-chaînes:
            String[] tableau = p.split(passi);
         
         //Et si tu veux quand même connaître le nombre de virgules:
            z = tableau.length -1;
            System.out.println("Nombre de virgules: " + z);


Cordialement,


...\ Dan /...
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
1 oct. 2012 à 09:16
Salut,

Je suis entièrement d'accord avec danimo, tu écris beaucoup de lignes pour rien.

Juste une petite précision, dans ce cas, j'utiliserais StringTokenizer directement dans compter le nombre de virgules.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 1
1 oct. 2012 à 13:59
Bonjour,

j'ai mis volontairement de côté la fonction split() parce qu'elle poserait problème sous Android.
De nombreux forums lui préfèrent StringTokenizer que j'ai découvert à cette occasion justement.

Par contre, c'est vrai que compter les virgules n'est plus très utile avec StringTokenizer... Je vais voir pour simplifier mon code ^^

Merci beaucoup

Signé Sagat
0
Utilisateur anonyme
2 oct. 2012 à 23:09
Je suis également du même avis que Julien39, un bon vieux StringTokenizer fait souvent l'affaire :D
Si ton problème est résolu, clique sur "Réponse acceptée" dans le meilleur post stp.

--
Pylouq
Heureux sont ceux qui lisent le Réglement, ils ne finiront peut-être pas au bûcher.
0
Rejoignez-nous