Извините, если это было запрошено, мой поиск вызвал много не по теме сообщений.
Я пытаюсь преобразовать символы подстановки из пользовательской строки поиска (подстановочный знак "*") в PostgreSQL как подстановочный знак "% ".
Я бы хотел обработать экранирование, чтобы "%" => "\%"
и "\*" => "*"
Я знаю, что мог бы заменить \*
чем-то другим до замены *
, а затемпоменяйте его местами, но я бы предпочел не делать этого, а вместо этого конвертировать *
, используя шаблон, который выбирает его, если он не обработан \
.
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
Идеи приветствуются.
РЕДАКТИРОВАТЬ
Чтобы уточнить,
Я хочу метод, который делает 1 или более String.replaceAll
вызовов для преобразования строки так, чтобы
- экземпляры
%
становятся \%
, - экземплярами
*
становятся %
и - экземплярами
\*
становятся *
.
Лучший ответ будет использовать наименьшее количество звонков на String.replaceAll
.