Question

En Java, supposons que j’ai une variable de chaîne S et que je veuille la chercher dans une autre chaîne T, comme ceci:

   if (T.matches(S)) ...

(remarque: la ligne ci-dessus était T.contains () jusqu'à ce que quelques articles indiquent que cette méthode n'utilise pas de regex. Mon mauvais.)

Mais supposons maintenant que S puisse contenir des caractères peu recommandables. Par exemple, prenons S = "[hi". Le crochet gauche entraînera l'échec de l'expression rationnelle. Existe-t-il une fonction que je peux appeler pour échapper à S afin que cela ne se produise pas? Dans ce cas particulier, j’aimerais qu’il soit transformé en "\ [hi" ".

Était-ce utile?

La solution

String.contains n'utilise pas de regex, il n'y a donc aucun problème dans ce cas.

Lorsqu'un regex est requis, plutôt que de rejeter les chaînes avec des caractères spéciaux, utilisez java.util.regex.Pattern.quote pour les échapper.

Autres conseils

Essayez Pattern.quote (String) . Cela corrigera tout ce qui a une signification spéciale dans la chaîne.

Une raison particulière de ne pas utiliser String.indexOf () à la place? De cette manière, il sera toujours interprété comme une chaîne normale plutôt que comme une expression régulière.

Regex utilise le caractère barre oblique inverse '\' pour échapper à un littéral. Étant donné que java utilise également le caractère barre oblique inverse, vous devez utiliser une double bashslash telle que:

   String S = "\\[hi"

Cela deviendra la chaîne:

  \[hi

qui sera passé à la regex.

Si vous vous souciez uniquement d'une chaîne littérale et que vous n'avez pas besoin de regex, vous pouvez procéder comme suit:

if (T.indexOf("[hi") != -1)  {

T.contains () (selon javadoc: http://java.sun.com/javase/6/docs/api/java/lang/String.html ) n’utilise pas d’expression régulière. Contient () des délégués à indexOf () uniquement.

Donc, il n'y a pas de regex utilisés ici. Avez-vous pensé à une autre méthode de String?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top