#java #spring #string #servlets #request
#java #spring #строка #сервлеты #запрос
Вопрос:
Итак, у меня есть URL, который
String url = request.getRequestURL() "?" request.getQueryString();
Существует параметр Custom=»true», который я хочу удалить, прежде чем сохранять его в url.
Есть ли какой-либо эффективный способ сделать это без использования регулярного выражения.
Example -
http://myhost:8080/people?lastname=Foxamp;age=30amp;Custom=trueamp;verified=yes
request.getQueryString(); // "lastname=Foxamp;age=30amp;Custom=trueamp;verified=yes"
Desired o/p - lastname=Foxamp;age=30amp;verified=yes
Комментарии:
1. пожалуйста, приведите пример значения queryString
2.
request.getQueryString().replace("Custom=trueamp;", "")
может быть?
Ответ №1:
Просто замените Custom=true
пустой строкой
query = query.replace("Custom=trueamp;","");
Комментарии:
1. Я предполагаю, что вы не поняли вопрос, request.getQueryString() уже возвращает строку после ?. из этой результирующей строки, которая является lastname= Foxamp;age =30amp; Custom=trueamp;verified = yes» , я хочу удалить Custom=true
2. Он заменит otherCustom=trueamp; too
3. Параметры уникальны, так что это не будет проблемой.
Ответ №2:
Если вы хотите заменить точное совпадение, приведенный ниже код будет работать.
String url = "http://myhost:8080/people?lastname=Foxamp;age=30amp;Custom=trueamp;verified=yes";
String newUrl = "";
String[] splits = url.split("amp;");
for(String split : splits) {
if(!"Custom=true".equals(split)) {
newUrl = newUrl "amp;" split;
}
}
Комментарии:
1. Этот подход не работает, если «Пользовательский» является единственным параметром в строке запроса
Ответ №3:
Вот решение, которое опирается на потоковый API Java 8:
StringBuffer requestUrl = request.getRequestURL();
String queryString = request.getQueryString();
String[] queryStringParts = queryString.split("amp;");
String newQueryString = Stream.of(queryStringParts)
.filter(p -> !p.equals("Custom=true"))
.collect(Collectors.joining("amp;"));
String newUrl = StringUtils.hasText(newQueryString) ?
requestUrl.append("?").append(newQueryString).toString() :
requestUrl.toString();
Также помогает тот факт, что URL-адрес запроса и строка запроса изначально разделены (как указано в вопросе).