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...

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();
1) exemple qui fonctionne, 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
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 séparés par des espaces]

(--> chaine entre [...])

1324
mot1
8
mots s
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 :

3) exemple avec un caractère spécial : "+"


traitement de : [<BALISE> 1324 mot1: 8 mots+mots]

(--> chaine entre [...])

1324
mot1
8
mots