【问题标题】:String url getting extension字符串 url 获取扩展名
【发布时间】:2013-11-25 11:58:22
【问题描述】:

我正在尝试从字符串中获取扩展名(dk、com、org、eu)或任何其他域扩展名。

例如:

http://www.example.com/siteone/sitetwo/currentpage

我想从这个字符串中获取 .com

我可以用非常混乱的方式来做 subString 但是当 url 看起来像这样时问题就来了:

dk.webpage.otherstuff.com/page

那么我将如何以一种不需要我检查每一步的方式来解决这个问题

【问题讨论】:

标签: java regex


【解决方案1】:

像这样使用 getHost() 方法:

public static String getDomainName(String testUrl) throws URISyntaxException {
    URI fullUri = new URI(testUrl);
    String domainName = fullUri.getHost();
    return domainName.startsWith("www.") ? domainName.substring(4) : domainName;
}

完成此操作后,只需将 subString 用于域名的 .com 部分即可。

【讨论】:

  • 如果您直接使用“www”。并且 subString(4) 将不起作用,因为现在有一些 URL 以 www3.xyz.com 开头,而不是您的代码将失败。
  • 然后,OP 可以在 domainName 上使用正则表达式,这取决于您想要进行的详细程度,随着自定义域的引入,这整个实践几乎是不可能做到的。
  • @liquidsnake786 与homesick.nu\ 之类的网站出现错误,你知道为什么吗? (错误是索引 7 处的无效字符(意味着 \ 是错误的,但怎么会呢?)
【解决方案2】:

使用 Guava 的 InternetDomainName 类。具体看看publicSuffix方法。

【讨论】:

    【解决方案3】:

    试试这个:

    String ext = url.replaceAll(".*//[^/]*(\\.\\w+)/.*", "$1");
    

    一些测试代码:

    String url = "http://www.example.com/siteone/sitetwo/currentpage";
    String ext = url.replaceAll(".*//[^/]*(\\.\\w+)/.*", "$1");
    System.out.println(ext);
    

    输出:

    .com
    

    【讨论】:

    • @RandomGuy $1 表示“捕获的组1”,这是用于捕获扩展的点和单词字符的括号模式
    【解决方案4】:

    试试这个:

    private String getExtensionFromDomain(String domainName){ int p = domainName.lastIndexOf(".") +1; return domainName.substring(p); }

    如果是 example.co.ma,这将输出:.ma

    【讨论】:

      猜你喜欢
      • 2019-02-26
      • 2013-05-11
      • 2011-10-23
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多