Désolé, si cela a été demandé, ma recherche a soulevé de nombreux messages hors sujet. J'essaie de convertir des caractères génériques à partir d'une chaîne de recherche définie par l'utilisateur (le caractère générique est "*") à PostgreSQL comme le caractère générique "%".expression régulière et d'échappement
Je voudrais gérer des échappements afin que "%" => "\%"
et "\*" => "*"
Je sais que je pourrais remplacer \*
autre chose avant de remplacer *
puis échanger en arrière, mais je préfère ne pas convertir et au lieu que *
en utilisant un motif qui le sélectionne lorsqu'il n'est pas passé par \
.
String convertWildcard(String like)
{
like = like.replaceAll("%", "\\%");
like = like.replaceAll("\\*", "%");
return like;
}
Assert.assertEquals("%", convertWildcard("*"));
Assert.assertEquals("\\%", convertWildcard("%"));
Assert.assertEquals("*", convertWildcard("\\*")); // FAIL
Assert.assertEquals("a%b", convertWildcard("a*b"));
Assert.assertEquals("a\\%b", convertWildcard("a%b"));
Assert.assertEquals("a*b", convertWildcard("a\\*b")); // FAIL
Idées de bienvenue.
EDIT
Pour clarifier les choses,
Je veux une méthode qui fait 1 ou plusieurs String.replaceAll
appels pour convertir une chaîne de telle sorte que
- occurrences de
%
deviennent\%
, - les occurrences de
*
deviennent%
etLes occurrences\*
deviennent*
.
La meilleure réponse utilisera les moindres appels à String.replaceAll
.
Je ne comprends pas vraiment la question. Pourriez-vous préciser ce que vous essayez de faire et quel est le problème? – cletus