我正在使用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
但它存在以下问题:
是否有一些标准或常用的库可以巧妙地实现上述功能,而无需自己解析和破解查询字符串?
小智 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)
如果您在Android上并且想要删除所有查询参数,您可以使用
Uri uriWithoutQuery = Uri.parse(urlWithQuery).buildUpon().clearQuery().build();
我不确定是否有一些库可以提供帮助,但我只是将字符串拆分为“?” 并把后半部分分成“&”。然后我会相应地重建字符串。
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)
输出:
要删除参数,只需将其从返回字符串中删除即可。
| 归档时间: |
|
| 查看次数: |
20388 次 |
| 最近记录: |