Кодирование строк URL с регулярным выражением - PullRequest
2 голосов
/ 07 января 2011

Я пытаюсь заменить несколько разных символов разными значениями. Например, если у меня есть: #love hate, я хотел бы получить обратно %23love%20hate

Это как-то связано с группами? я пытался понять, используя группы, но я действительно не понял этого.

Ответы [ 6 ]

6 голосов
/ 07 января 2011

Вы можете попробовать сделать это:

String encodedstring = URLEncoder.encode("#love hate","UTF-8");

Это даст вам желаемый результат. Чтобы изменить это, вы должны сделать это:

String loveHate = URLDecoder.decode(encodedstring);
3 голосов
/ 07 января 2011

Вам не нужен RegEx для замены отдельных символов.RegEx является излишним для таких свиней.Вы можете просто использовать простой метод замены класса String в цикле для каждого символа, который хотите заменить.

String output = input.replace("#", "%23");
output = output.replace(" ", "%20");

Сколько таких символов вы хотите заменить?

2 голосов
/ 07 января 2011

Если вы пытаетесь закодировать URL-адрес в utf-8 или некоторые другие кодировки с использованием существующих классов будут намного проще

например.

проект commons-httpclient

  URIUtil.encodeWithinQuery(input,"UTF-8");
1 голос
/ 07 января 2011

Как сказал Мат, лучший способ решить эту проблему - использовать URLEncoder.Однако, если вы настаиваете на использовании регулярных выражений, то посмотрите пример кода в документации для java.util.regex.Matcher.appendReplacement:

 Pattern p = Pattern.compile("cat");
 Matcher m = p.matcher("one cat two cats in the yard");
 StringBuffer sb = new StringBuffer();
 while (m.find()) {
     m.appendReplacement(sb, "dog");
 }
 m.appendTail(sb);
 System.out.println(sb.toString());

В цикле вы можете использовать m.group(), чтобы увидеть, какая подстрока соответствует, и затем выполнитьвыборочная замена на основе этого.Эту технику можно использовать для замены $ {переменных} путем поиска их на карте и т. Д.

1 голос
/ 07 января 2011

я думаю, что вы хотите добиться своего рода кодировки URL вместо чистой замены.

посмотрите ответы на эту ветку SO, особенно те, которые имеют 7 голосов, которые могут быть более интересными для вас.

HTTP-кодировка URL-адреса в Java

1 голос
/ 07 января 2011

Нет, вам понадобится несколько замен.Другой вариант - использовать группу, чтобы найти следующее вхождение одной из нескольких строк, проверить, что это за строка, и заменить соответствующим образом, возможно, используя карту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...