2012-06-26 62 views
6

我有不同形式的一系列字符串(網址)爲:Java中的URL類中的getHost和getAuthority方法有什麼區別?

  1. http://domain name.anything/anypath
  2. https://dmain name.anything/anypath
  3. http://www.domain name.anything/anypath
  4. https://www.dmain name.anything/anypath

這些字符串保存在CSV文件中。我需要解析每個網址才能獲取域名,domain name.anything。即第一個.之後和第一個/之前的部分。

我使用split方法分隔字符串,然後將每個字符串轉換爲URL,然後使用toAuthority函數僅獲取域名。問題是,toAuthoritytoHost爲我做了同樣的工作,他們包括我不想要的www.。雖然在Oracle的tutorial中,似乎toAuthority應該返回沒有www.的域名。

我怎樣才能提取的域名部分只有沒有www.的URL?

+0

'getHost'獲取主機名和'getAuthority'得到權威 –

回答

13

URL類中的getHost和getAuthority方法有什麼區別?

要真正理解這一點,您應該閱讀URI specification - RFC 2396

簡而言之,權限組件由主機組件和可選的端口號,用戶名和密碼組成,具體取決於所使用的URL方案。


我怎樣才能提取域名部分只是沒了「WWW」。的URL?

您打電話給getHost(),測試它是否以字符串"www."開頭,如果它刪除它。

但在你開始做這樣的事情之前,你需要明白,刪除「www」。可能會給您一個不起作用的URL,或者解析爲與原始URL解析爲不同的文檔或服務。無償地整理網址是個不錯的主意......除非您詳細瞭解相關網站的組織方式。

「foo.com」和「www.foo.com」是同一個地方的約定是只是的一個慣例,很多網站都沒有實現它。刪除「www。」將是一個壞主意,因爲它可能會將可解析的URL轉換爲無法解析的URL。

+0

添加RFC規範和foo.com/」 www.foo.com「澄清是一個很好的接觸。 –

1

這聽起來像你正在尋找提取有效的二級域名。正如斯蒂芬所描述的那樣,首先獲取主機名稱,然後從第二階段開始提取子字符串,這很容易爲少量公共後綴(如.com,.net和.org)提取。許多公共後綴例如co.uk會破壞這個簡單的算法。公共後綴的完整列表可以在這裏找到:http://publicsuffix.org/然後,您可以在查找表中使用公共後綴來獲得有效的二級域名。

1

你可以使用谷歌番石榴從主機名獲取域名:

InternetDomainName.from(hostname).topPrivateDomain().toString() 
相關問題