从查询字符串中删除一个参数,而无需使用正则表达式

时间:2019-03-15 10:01:32

标签: java spring string servlets request

所以我有一个

String url = request.getRequestURL()+"?"+request.getQueryString();

有一个参数Custom =“ true”,我想在将其存储在url中之前删除该参数。 有什么有效的方法可以执行此操作,而无需使用正则表达式。

Example - 

 http://myhost:8080/people?lastname=Fox&age=30&Custom=true&verified=yes

 request.getQueryString();  // "lastname=Fox&age=30&Custom=true&verified=yes"

Desired o/p - lastname=Fox&age=30&verified=yes

3 个答案:

答案 0 :(得分:1)

只需用空字符串替换Custom=true

query = query.replace("Custom=true&",""); 

答案 1 :(得分:1)

如果您要替换完全匹配项,则下面的代码将起作用。

String url = "http://myhost:8080/people?lastname=Fox&age=30&Custom=true&verified=yes";
    String newUrl = "";
    String[] splits = url.split("&");
    for(String split : splits) {
        if(!"Custom=true".equals(split)) {
            newUrl = newUrl+"&"+split;
        }
    }

答案 2 :(得分:0)

这是一个依赖于 Java 8 Streaming API 的解决方案:

    StringBuffer requestUrl = request.getRequestURL();
    String queryString = request.getQueryString();

    String[] queryStringParts = queryString.split("&");

    String newQueryString = Stream.of(queryStringParts)
            .filter(p -> !p.equals("Custom=true"))
            .collect(Collectors.joining("&"));

    String newUrl = StringUtils.hasText(newQueryString) ?
            requestUrl.append("?").append(newQueryString).toString() :
            requestUrl.toString();

此外,请求 url 和查询字符串最初是分开的(如问题中所述)实际上也有帮助。