如何在Java中解析任何URL/URI?

如何在Java中解析任何URL/URI?,java,parsing,url,Java,Parsing,Url,我正在寻找一种在Java中解析URL/URI的方法,而不必担心常见URL的异常。我所知道的Java集成方式是分别使用Java.net.URIJava.net.URL 这些类别中的每一个都有主要的回退: java.net.URL无法处理自定义协议/方案,因此使用类似idontcare://bla.com/test java.net.URI对于自定义协议/方案没有问题,但如果查询部分包含“非法字符”(非URL编码的特殊字符),则会失败。因此,它失败了,例如在像https://bla.example

我正在寻找一种在Java中解析URL/URI的方法,而不必担心常见URL的异常。我所知道的Java集成方式是分别使用
Java.net.URI
Java.net.URL

这些类别中的每一个都有主要的回退:

  • java.net.URL
    无法处理自定义协议/方案,因此使用类似
    idontcare://bla.com/test
  • java.net.URI
    对于自定义协议/方案没有问题,但如果查询部分包含“非法字符”(非URL编码的特殊字符),则会失败。因此,它失败了,例如在像
    https://bla.example.org/css?family=Roboto:300|机器人:300400500700&lang=de
是否有一种通用的、不受限制的(在上述情况下不会抛出错误)方法来解析Java中的URL?

我从Spring Framework中发现,它能够处理两个URI:

字符串uri=。。。
UriComponents UriComponents=UriComponentsBuilder.fromUriString(uri.build();

您可以查看以查看它的功能。

请参见@y_ug该问题与相反的方向有关-它是关于构建正确编码的URL,我有一个
字符串
,其中包含一个URL,只需访问它的组件,如主机名和协议/方案。我明白了。然后,那些不需要额外依赖项(如Spring框架中的
UriComponents
)的人可以编写自定义协议/方案处理程序和/或实现
URLStreamHandlerFactory
并通过
java.protocol.handler.pkgs
属性启用它们,或注册
URL.setURLStreamHandlerFactory.
如果您在非Spring应用程序上,则库
org.springframework:springweb
及其依赖项是大量代码(目前对于5.2.3而言,大约3.4MB)只是用于解析URI。但是链接代码中的正则表达式模式
URI\u模式
,以及
fromustring(String)
方法似乎很有价值。它在Apache 2许可证下:)