为什么将字符串传递给 URI 会抛出异常?

Why passing a string to URI throws exception?

我有这样的代码:

String previousUrl = "http://localhost:8080/abc.html?xyz=hbkbkj|kjbjkbkj kjbkj";
URL url = new URL(previousUrl);
URI uri = new URI(url.getProtocol(), url.getHost(), url.getPath(), url.getQuery(), url.getRef());

现在这段代码可以完美运行了。我得到了所需的 URI。

但是如果我将 previousUrl 传递给 URI 构造函数,它就会抛出异常。我想知道原因。

String previousUrl = "http://localhost:8080/abc.html?xyz=hbkbkj|kjbjkbkj kjbkj";
URI uri = new URI(previousUrl);

谢谢。

原因已经告诉你了! url:

中有无效字符
java.net.URISyntaxException: Illegal character in query at index 41: http://localhost:8080/abc.html?xyz=hbkbkj|kjbjkbkj kjbkj

所以字符|无法处理!因此,在将信息传递给 URI 构造函数之前,您必须创建一个 URL(就像您已经成功完成的那样)


您也可以尝试用 % 等价物替换所有无法处理的字符:

new URI(previousUrl.replaceAll(" ", "%20").replaceAll("\|", "%7C"));

但每次遇到无法处理的新角色时,您都必须添加更多此类替换!