Было бы легче экранировать &
в значениях перед формированием объединенной строки пары имя-значение. Но, учитывая уже закодированную строку, я думаю, что вариант предложения Мости мог бы работать лучше всего:
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 ? "&" : "&");
sb.append(pair);
}
return sb.toString();
}
Вероятно, это будет быстрее, чем обычные попытки сделать это с помощью регулярных выражений.