Java URI.resolve
我正在尝试解决两个 URI,但它并不像我想要的那么简单。
URI a = new URI("http://www.foo.com");
URI b = new URI("bar.html");
麻烦的是,现在是。我怎么能逃脱呢?a.resolve(b).toString()
"http://www.foo.combar.html"
我正在尝试解决两个 URI,但它并不像我想要的那么简单。
URI a = new URI("http://www.foo.com");
URI b = new URI("bar.html");
麻烦的是,现在是。我怎么能逃脱呢?a.resolve(b).toString()
"http://www.foo.combar.html"
听起来您可能希望使用URL而不是URI(URI更通用,需要处理不太严格的语法)。
URI a = new URI("http://www.foo.com");
URI b = new URI("bar.html");
URI c = a.resolve(b);
c.toString() -> "http://www.foo.combar.html"
c.getAuthority() -> "www.foo.com"
c.getPath() -> "bar.html"
URI 的 toString() 的行为并不像你预期的那样,但考虑到它的一般性质,它可能应该被原谅。
可悲的是,URI的toURL()方法并不像我希望给你想要的那么好。
URL u = c.toURL();
u.toString() -> "http://www.foo.combar.html"
u.getAuthority() -> "www.foo.combar.html" --- Oh dear :(
因此,最好直接从URL开始,以获得您想要的内容:
URL x = new URL("http://www.foo.com");
URL y = new URL(x, "bar.html");
y.toString() -> "http://www.foo.com/bar.html"
URI 还应包含最终的分隔符 ('/') 以按所需方式解析:
URI a = new URI("http://www.foo.com/");