为什么第一个回归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 + "].");
}
Run Code Online (Sandbox Code Playgroud)
And*_*niy 10
正如@hsz的评论中提到的那样,它已知错误.
但是,让我们调试并查看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.