从url字符串中删除get参数的最佳方法是什么?

时间:2014-12-03 08:43:30

标签: java

我有以下网址字符串:

http://www.xyz/path1/path2/path3?param1=value1&param2=value2”。

我需要在没有参数的情况下获取此url,因此结果应为:

http://www.xyz/path1/path2/path3”。

我这样做了:

private String getUrlWithoutParameters(String url)
{
  return url.substring(0,url.lastIndexOf('?'));
}

有没有更好的方法呢?

7 个答案:

答案 0 :(得分:39)

可能不是最有效的方式,但更安全类型:

private String getUrlWithoutParameters(String url) throws URISyntaxException {
    URI uri = new URI(url);
    return new URI(uri.getScheme(),
                   uri.getAuthority(),
                   uri.getPath(),
                   null, // Ignore the query part of the input url
                   uri.getFragment()).toString();
}

答案 1 :(得分:11)

我通常使用

url.split("\\?")[0]

答案 2 :(得分:2)

使用JAX-RS 2.0中的Demo

UriComponentsBuilder.fromUriString("https://www.google.co.nz/search?q=test").replaceQuery(null).build(Collections.emptyMap());

使用与Spring非常相似的javax.ws.rs.core.UriBuilder

{
  "client_id": "samudini.apps.googleusercontent.com",
  "redirect_uri": "com.googleusercontent.apps.samudini:/oauth2redirect",
  "authorization_scope": "openid email profile api1",
  "discovery_uri": "",
  "authorization_endpoint_uri": "http://localhost:5000/account/login",
  "token_endpoint_uri": "http://localhost:5000/connect/token",
  "registration_endpoint_uri": "",
  "user_info_endpoint_uri": "http://localhost:5000/connect/token",
  "https_required": false
}

答案 3 :(得分:1)

尝试在String中使用substring和indexOf方法:

String str = "http://www.xyz/path1/path2/path3?param1=value1&param2=value2";
int index = str.indexOf("?");
if (index != -1) {
    System.out.println(str.substring(0, str.indexOf("?")));
} else {
    System.out.println("You dont have question mark in your url");
}

答案 4 :(得分:1)

使用URL可以通过方法完成。使用String:

url = url.replaceFirst("\\?.*$", "");

这会尝试用问号替换所有开头。没有问号时,保留原始字符串。

答案 5 :(得分:1)

您可以使用以下内容,从网址中删除查询部分。

private String getUrlWithoutParameters(String url) throws MalformedURLException {
    return url.replace(new URL(url).getQuery(), "");
}

或者,您可能想要检查网址重写是否满足您的需求:http://tuckey.org/urlrewrite/

答案 6 :(得分:0)

您可以从httpclient jar中使用org.apache.http.client.utils.URIBuilder

@Test
void test_removeQueryParameters() throws Exception {
    String url = "http://www.google.com?query=Shanghai&foo=bar";
    String expectedUrl = "http://www.google.com";

    String result = removeQueryParameters(url);
    Assert.assertThat(result, equalTo(expectedUrl));
}

public String removeQueryParameters(String url) throws URISyntaxException {
    URIBuilder uriBuilder = new URIBuilder(url);
    uriBuilder.removeQuery();

    return uriBuilder.build().toString();
}