Java регулярное выражение для поиска последовательности символов в строке - PullRequest
0 голосов
/ 03 октября 2011

Я хотел бы узнать, есть ли в моей строке = & & sequence. Если да, то я хотел бы кодировать второй &. Как с помощью Java Regex я могу найти его?

Моя строка примерно такая:

а = кошка и б = собака и кошка & с = обезьяна

Спасибо Chaitanya

Ответы [ 4 ]

3 голосов
/ 03 октября 2011

Как предположили Мости и Тед, возможно, лучший способ сделать это - обнаружить и избежать «&».

Однако, если вы хотите, чтобы одно регулярное выражение выполняло всю работу за вас, вот оно:

String s = "a=cat&b=dog&cat&c=monkey";

s = s.replaceAll("&(?=[^=]*&)", "&");

System.out.println(s);
2 голосов
/ 03 октября 2011

Почему бы вам просто не разделить это?

Сначала разделите его на "&", затем возьмите второй элемент

0 голосов
/ 03 октября 2011

Было бы легче экранировать & в значениях перед формированием объединенной строки пары имя-значение. Но, учитывая уже закодированную строку, я думаю, что вариант предложения Мости мог бы работать лучше всего:

String escapeAmpersands(String nvp) {
    StringBuilder sb = new StringBuilder();
    String[] pairs = nvp.split("&");
    if (pairs[0].indexOf('=') < 0) {
        // Maybe do something smarter with "a&b=cat&c=dog"?
        throw new Exception("Can't handle names with '&'");
    }
    sb.append(pairs[0]);
    for (int i = 1; i < pairs.length; ++i) {
        String pair = pairs[i];
        sb.append(pair.indexOf('=') < 0 ? "&amp;" : "&");
        sb.append(pair);
    }
    return sb.toString();
}

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

0 голосов
/ 03 октября 2011

Вы можете использовать этот формат:

if (string.contains("=&&"))
{
 // do something
}
else
{
 // do something else
}

Я не знаю, что вы подразумеваете под "кодировать &", хотя. Не могли бы вы уточнить?

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