gpt4 book ai didi

当字符串包含冒号时 java.net.URI().getPath() 返回 null?

转载 作者:行者123 更新时间:2023-12-02 02:07:22 25 4
gpt4 key购买 nike

准确地说,请考虑以下字符串示例:

String str = ":Royal%2Bweddings%3A%2Bceremony%2BThe%2Bsymbolism";
java.net.URI(str).getPath();

这里,因为 str 包含 : 冒号,URI().getPath() 返回 null,但如果我删除冒号,则返回值正如我所期望的那样。

那么如何让 URI().getPath() 不过滤冒号并保持原样?

最佳答案

首先,关于您的代码的一些事情。它无法编译,因为您需要使用 new 来创建新对象:

String str = ":Royal%2Bweddings%3A%2Bceremony%2BThe%2Bsymbolism";
new java.net.URI(str).getPath();

该代码不会返回 null - 相反,它会抛出一个描述性异常:

java.net.URISyntaxException: Expected scheme name at index 0: :Royal%2Bweddings%3A%2Bceremony%2BThe%2Bsymbolism

URI 构造函数采用完整的 URI,冒号具有特殊含义 - 但需要以协议(protocol)名称作为前缀,例如 http:file:

如果要在路径中使用这些特殊字符,则需要对路径进行 URL 编码 - 这是在 URL 或 URI 中包含特殊字符的正常做法:

String str = ":Royal%2Bweddings%3A%2Bceremony%2BThe%2Bsymbolism";
str = URLEncoder.encode(str, "UTF-8"); // <---- URL encoding
System.out.println(new java.net.URI(str).getPath());

您不需要用自己的替代方案提出自己的编码方案 - URL 就是标准。而且您也不需要解码,这是由 getPath() 自动处理的。

但是,在您的情况下,您的路径已经部分网址编码 - 并且它已经包含冒号:Royal+weddings:+ceremony+The+symbolism

您需要一次性对整个路径进行 URL 编码:

String encoded = URLEncoder.encode(":Royal+weddings:+ceremony+The+symbolism", "UTF-8");

那么你就安顿下来了。

关于当字符串包含冒号时 java.net.URI().getPath() 返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50575691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com