如@hsz的评论中所述,这是已知的bug。
但是,让我们调试并查看URI类的源代码。问题出在方法内部:
private int parseHostname(int start, int n):
第一个URI解析失败 if ((p < n) && !at(p, n, ’:’)) fail('Illegal character inhostname', p);
这是因为_符号未扫描块内foreseed,它只允许阿尔法,数字和-符号(L_ALPHANUM,H_ALPHANUM,L_DASH和H_DASH)。
是的,这尚未在中解决Java 7。
解决方法为什么第一个返回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 + '].');}