URI-getHost返回null。为什么?
为什么第一个返回null
,而第二个返回mail.yahoo.com
?
这不是很奇怪吗?如果不是,此行为背后的逻辑是什么?
下划线是罪魁祸首吗?为什么?
public static void main(String[] args) throws Exception { java.net.URI uri = new java.net.URI("http://broken_arrow.huntingtonhelps.com");
String host = uri.getHost();
System.out.println("Host = [" + host + "].");
uri = new java.net.URI("http://mail.yahoo.com");
host = uri.getHost();
System.out.println("Host = [" + host + "].");
}
回答:
如@hsz的评论中所述,这是已知的bug。
但是,让我们调试并查看URI
类的源代码。问题出在方法内部:
private int parseHostname(int start, int n)
:
第一个URI解析失败 if ((p < n) && !at(p, n, ':')) fail("Illegal character in
hostname", p);
这是因为_
符号未扫描块内foreseed,它只允许阿尔法,数字和-
符号(L_ALPHANUM
,H_ALPHANUM
,L_DASH
和H_DASH
)。
是的,这尚未在中解决Java 7
。
以上是 URI-getHost返回null。为什么? 的全部内容, 来源链接: utcz.com/qa/408166.html