Comment protéger une string dans une expression régulière en java

Publié le 3 Novembre 2011

En java il y a une méthode split() qui permet de découper une chaîne en précisant un séparateur et récupérer tous les éléments sous forme de tableau.

Par exemple pour découper une ligne au format csv on utilisera:

String ligne = "une,ligne,avec,des,séparateurs";
String[] elements = ligne.split(",");
for(String elem : elements){
   System.out.println(elem);
}

Ce qui affichera:

une
ligne
avec
des
séparateurs

ça marche très bien avec des , ou des ; mais en fait split() utilise une expression régulière donc le code suivant ne marchera pas (car | est un caractère spécial dans une expression régulière)

String ligne = "une|ligne|avec|des|séparateurs";
String[] elements = ligne.split("|");

Il faut en fait protéger | avec un \ devant:

String[] elements = ligne.split("\|");

Mais ça ne marche pas encore car \ est un caractère spécial dans les String java. Il faut donc également protéger le \ avec un\ devant:

String[] elements = ligne.split("\\|");

Voilà cette fois c'est bon mais tout ceci n'est pas très user friendly et il est très facile de faire des erreurs en oubliant de protéger un caractère. Heureusement il existe une méthode qui fait tout ça à notre place. Il s'agit de Pattern.quote(). Ce qui donne le code suivant:

String ligne = "une|ligne|avec|des|séparateurs";
String[] elements = ligne.split(Pattern.quote("|"));

Rédigé par Bliz

Publié dans #Java

Repost 0
Commenter cet article