【问题标题】:how to check protocol present in url or not?如何检查 url 中是否存在协议?
【发布时间】:2012-02-20 14:55:38
【问题描述】:

如何检查协议是否存在于 URL 中,如果不存在则需要附加它。 有没有什么类可以在java中实现这一点? 例如:字符串 URL = www.google.com

需要得到http://www.google.com

【问题讨论】:

    标签: java protocols


    【解决方案1】:

    只需使用String.startsWith("http://") 进行检查。

    public String ensure_has_protocol(final String a_url)
    {
        if (!a_url.startsWith("http://"))
        {
            return "http://" + a_url;
        }
        return a_url;
    }
    

    编辑:

    另一种方法是使用 java.net.URL 实例,如果 URL 不包含(合法)协议(或由于任何其他原因无效),其构造函数将抛出 java.net.MalformedURLException

    public URL make_url(final String a_url) throws MalformedURLException
    {
        try
        {
            return new URL(a_url);
        }
        catch (final MalformedURLException e)
        {
        }
        return new URL("http://" + a_url);
    }
    

    您可以使用URL.toString() 来获取URL 的字符串表示。这是对 startsWith() 方法的改进,因为它保证返回 URL 有效。

    【讨论】:

    • !a_url.matches("\\w+\\:.*") for https, file
    【解决方案2】:

    假设你有String url = www.google.com。对于检查协议标识符的目标,字符串类方法就足够了。例如,url.startsWith("https://") 将检查特定字符串是否以给定的协议名称开头。

    但是,这些控件是否足以进行验证?

    我认为他们不够。首先,您应该定义一个有效协议标识符的列表,例如一个字符串数组,如{"http", "ftp", "https", ...}。然后,您可以使用正则表达式 ("://") 解析您的输入字符串,并测试您的 URL 标头是否属于有效协议标识符列表。并且域名验证方法超出了这个问题,您也可以/应该使用不同的技术来处理它。

    【讨论】:

    • 为了完整起见,我会执行以下操作:' private static boolean isUrlHttps(String url){ if(Strings.isNullOrEmpty(url)) return false;返回 url.toLowerCase().startsWith("https://"); }'
    【解决方案3】:

    为了完整起见,我会执行以下操作:

    import com.google.common.base.Strings;
    
    private static boolean isUrlHttps(String url){
        if(Strings.isNullOrEmpty(url))
            return false;
        return url.toLowerCase().startsWith("https://");
    }
    

    【讨论】:

      猜你喜欢
      • 2013-05-12
      • 2015-08-05
      • 1970-01-01
      • 2020-07-05
      • 2018-01-26
      • 2011-02-21
      • 2011-12-14
      • 2012-10-24
      • 2019-06-03
      相关资源
      最近更新 更多