我有以下网址字符串:
“http://www.xyz/path1/path2/path3?param1=value1¶m2=value2”。
我需要在没有参数的情况下获取此url,因此结果应为:
“http://www.xyz/path1/path2/path3”。
我这样做了:
private String getUrlWithoutParameters(String url)
{
return url.substring(0,url.lastIndexOf('?'));
}
有没有更好的方法呢?
答案 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¶m2=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();
}