8

我有一系列不同形式的字符串(URL):

  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 文件中。我需要解析每个 URL 才能仅获取域名,domain name.anything. 即第一个之后.和第一个之前的部分/

我使用方法分隔字符串split,然后将每个字符串转换为 URL,然后使用该toAuthority函数仅获取域名。问题是,toAuthority并且toHost正在为我做同样的工作,它们包括www.我不想要的。虽然,在 Oracle 的教程中,似乎toAuthority应该返回没有www..

如何在没有www.URL 的情况下仅提取域名部分?

4

3 回答 3

14

URL 类中的 getHost 和 getAuthority 方法有什么区别?

要真正理解这一点,您应该阅读URI 规范 - RFC 2396

简短的回答是,权限组件由主机组件以及可选的端口号、用户名和密码组成……取决于所使用的 URL 方案。


如何在没有“www.”的情况下仅提取域名部分。的网址??

您调用getHost(),测试它是否以字符串开头,"www."如果是,则将其删除。

但在你开始做这样的事情之前,你需要了解删除“www”。可能会为您提供一个不起作用的 URL,或者解析为与原始 URL 解析到的文档或服务不同的文档或服务。无偿整理 URL 是个坏主意……除非您详细了解相关网站的组织方式。

“foo.com”和“www.foo.com”是同一个地方的约定只是约定,很多网站都没有实现。删除“www”。这将是一个坏主意,因为它很可能将可解析的 URL 转换为无法解析的 URL。

于 2012-06-26T14:56:38.483 回答
2

您可以使用 google guava 从主机名中获取域名:

InternetDomainName.from(hostname).topPrivateDomain().toString()
于 2014-07-29T11:44:53.197 回答
1

听起来您正在寻找有效的二级域。对于少数公共后缀,例如 .com、.net、.org,这很容易提取,方法是首先获取主机名,如 Stephen 所述,然后从末尾的第二个句点开始提取子字符串。但是,许多公共后缀(例如 co.uk)会破坏这个简单的算法。可以在此处找到完整的公共后缀列表:http ://publicsuffix.org/然后您可以在查找表中使用公共后缀来获得有效的二级域。

于 2013-09-23T20:53:51.253 回答