我正在使用 java.net.URL.getPort() 从 URL 中提取端口号。大多数时候这效果很好。但是,当 URL 包含右括号字符“]”时,它将失败:
new URL("http://abc.com:123/abc.mp3").getPort();
returns: (int) 123
Run Code Online (Sandbox Code Playgroud)
但如果 URL 包含“]”我得到:
new URL("http://abc.com:123/abc].mp3").getPort();
returns: (int) -1
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
编辑#1:作为测试,我将相同的代码粘贴到非 Android Java 应用程序中,并且端口号已正确返回,因此这似乎是 Android SDK 的异常情况。
如果您的 URL 包含一些在 URL 中无效的符号,则必须使用 URL 编码字符串。他们在 Java 中做到这一点的方法似乎是使用URI.
new URI( "http", null, "abc.com", 123, "abc].mp3", null, null).toURL().getPort();
Run Code Online (Sandbox Code Playgroud)
如果您已有 URL 字符串:
URL url = new URL("http://abc.com:123/abc].mp3");
Run Code Online (Sandbox Code Playgroud)
那么这对我有用:
new URI(
url.getProtocol(),
null,
url.getHost(),
url.getPort(),
url.getPath(),
null,
null);
Run Code Online (Sandbox Code Playgroud)
但话又说回来,我用的url.getPort()是你说的不起作用。但是当我现在在 Java 6 上测试时。new URL("http://abc.com:123/abc].mp3").getPort();实际上对我有用,也许只是在 Android 上不起作用?如果它不起作用,我认为最好使用第三方库。Android 中包含的 Apache Http Client 似乎对 URL 有一些额外的功能:请参阅org.apache.http.client.utils
| 归档时间: |
|
| 查看次数: |
15486 次 |
| 最近记录: |