我的要求相当简单,但我需要做很多这样的事情,所以我正在寻找一个强大的解决方案。
是否有一个很好的轻量级库,用于将URL分解为Java中的组件部分?我指的是主机名,查询字符串等。
答案 0 :(得分:7)
我总是忘记URI格式,所以这里是:
<scheme>://<userinfo>@<host>:<port><path>#<fragement>
这是一个例子:
URI uri = new URI ("query://jeff@books.com:9000/public/manuals/appliances?stove#ge");
将发生以下情况:
uri.getAuthority()
将返回"jeff@books.com:9000"
uri.getFragment ()
将返回"ge"
uri.getHost ()
将返回"books.com"
uri.getPath ()
将返回"/public/manuals/appliances"
uri.getPort ()
将返回9000
uri.getQuery ()
将返回"stove"
uri.getScheme ()
将返回"query"
uri.getSchemeSpecificPart ()
将返回"//jeff@books.com:9000/public/manuals/appliances?stove"
uri.getUserInfo ()
将返回"jeff"
uri.isAbsolute ()
将返回true
uri.isOpaque ()
将返回false
我发现这个博客很方便:Exploring Java's Network API: URIs and URLs
答案 1 :(得分:3)
看看java.net.URL。它有完全符合您要求的方法。
主机名:getHost()
查询字符串:getQuery()
片段/参考/锚:getRef()
路径:getPath()
答案 2 :(得分:2)
java.net.URI
和java.net.URL
不适用于许多现代网址。 java.net.URI
遵守RFC 2396,这是一个非常古老的标准。 java.net.URL
有时会做得很好,但是如果您正在使用野外发现的网址,那么在很多情况下都会失败。
为了解决这些问题,我写了galimatias,一个用于Java的URL解析和规范化库。它几乎可以与您想象的任何URL一起使用(基本上,如果它在Web浏览器中工作,则galimatias将正确解析它)。它有非常方便的API。
答案 3 :(得分:0)
查看URL class的getter方法。
你有你需要的一切。
答案 4 :(得分:0)
URL.getProtocol()
URL.getHost()
URL.getPort()
等等。