Limites de la classe Scanner
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:
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 :
Citation:
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 :
Citation:
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 : "+"
Citation:
traitement de : [<BALISE> 1324 mot1: 8 mots+mots]
(--> chaine entre [...])
1324
mot1
8
mots