URI - getHost返回null.为什么?

pet*_*rov 14 java

为什么第一个回归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_DASHH_DASH).

是的,这还没有解决Java 7.

  • 在Java 8中,这仍然没有得到解决 (5认同)