Удалить один параметр из строки запроса без использования регулярного выражения

#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-адрес запроса и строка запроса изначально разделены (как указано в вопросе).