如何从查询字符串中删除查询参数

Mar*_*tus 4 java

我正在使用UriBuilder从 URI 中删除参数:

public static URI removeParameterFromURI(URI uri, String param) {
    UriBuilder uriBuilder = UriBuilder.fromUri(uri);
    return uriBuilder.replaceQueryParam(param, "").build();
}

public static String removeParameterFromURIString(String uriString, String param) {
    try {
        URI uri = removeParameterFromURI(new URI(uriString), param);
        return uri.toString();
    } catch (URISyntaxException e) {
        throw new RuntimeException(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

上述类型的作品和修改:

http://abc/d/e/f?foo=1&bar=2&zar=3

… 进入:

http://abc/d/e/f?bar=&foo=1&zar=3

但它存在以下问题:

  1. 它弄乱了参数的顺序。我知道订单不相关,但它仍然困扰着我。
  2. 它并没有完全删除参数,它只是将其值设置为空字符串。我更喜欢从查询字符串中完全删除参数。

是否有一些标准或常用的库可以巧妙地实现上述功能,而无需自己解析和破解查询字符串?

小智 5

在 Android 中,无需导入任何库。我写了一个受这个答案启发的 util 方法Replace query parameters in Uri.Builder in Android?在 Android 中替换 Uri.Builder 中的查询参数?

希望能帮到你。代码如下:

public static Uri removeUriParameter(Uri uri, String key) {
    final Set<String> params = uri.getQueryParameterNames();
    final Uri.Builder newUri = uri.buildUpon().clearQuery();
    for (String param : params) {
        if (!param.equals(key)) {
            newUri.appendQueryParameter(param, uri.getQueryParameter(param));
        }
    }
    return newUri.build();
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*l F 5

如果您在Android上并且想要删除所有查询参数,您可以使用

Uri uriWithoutQuery = Uri.parse(urlWithQuery).buildUpon().clearQuery().build();


Sed*_*ick 0

我不确定是否有一些库可以提供帮助,但我只是将字符串拆分为“?” 并把后半部分分成“&”。然后我会相应地重建字符串。

    public static void main(String[] args) {
        // TODO code application logic here
        System.out.println("original: http://a.b.c/d/e/f?foo=1&bar=2&zar=3");
        System.out.println("new     : " + fixString("http://a.b.c/d/e/f?foo=1&bar=2&zar=3"));
    }

    static String fixString(String original)
    {
        String[] processing = original.split("\\?");
        String[] processing2ndHalf = processing[1].split("&");

        return processing[0] + "?" + processing2ndHalf[1] + "&" + processing2ndHalf[0] + "&" + processing2ndHalf[2];
    }
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述

要删除参数,只需将其从返回字符串中删除即可。