Salut à tous,
précédemment dans un autre post :
http://www.developpez.net/forums/sho...d.php?t=159353
je cherchais à résoudre un problème avec StringTokenizer, le problème ayant été plus compliqué que je ne le pensais, j'ai cherché une autre solution. En effet, mon besoin ne se limitait pas à un ou deux marqueur dans une même chaîne mais à un N...
La classe Scanner a donc résolu une partie de mon problème en revanche, cette classe ne prends apparement pas en compte certains caractères spéciaux. J'appuis cette conclusion par 2 exemples :
Pour tous les exemples, le code source est identique, seules les chaînes à traiter diffèrent...
1) exemple qui fonctionne, j'extrais d'une chaine un nombre, une chaine, un mot :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 String l_readLine = "<BALISE> 1324 mot1: 8 mots separes par des espaces"; System.out.println("traitement de : ["+l_readLine+"]\n\n(--> chaine entre [...])\n"); Scanner s = new Scanner(l_readLine); s.findInLine("<BALISE> (\\d+) (\\w+): (\\d+) ([\\w\\s]*)"); MatchResult result = s.match(); for (int i=1; i<=result.groupCount(); i++) System.out.println(result.group(i)+" "); s.close();
2) même exemple avec des accents, j'extrais d'une chaine un nombre, une chaine, un mot :traitement de : [<BALISE> 1324 mot1: 8 mots separes par des espaces]
(--> chaine entre [...])
1324
mot1
8
mots separes par des espaces
S'il n'y avait que les accents bon encore... (ennuyeux mais bon, il y a probablement un moyen de contrer ca...) en revanche ce qui est moins drôle :traitement de : [<BALISE> 1324 mot1: 8 mots séparés par des espaces]
(--> chaine entre [...])
1324
mot1
8
mots s
3) exemple avec un caractère spécial : "+"
traitement de : [<BALISE> 1324 mot1: 8 mots+mots]
(--> chaine entre [...])
1324
mot1
8
mots
Partager