如何检查url中是否存在协议?

时间:2012-02-20 14:55:39

标签: java protocols

如何检查协议是否存在于URL中,如果不存在则需要附加它。 是否有任何类在java中实现这一点? 例如:String URL = www.google.com

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

3 个答案:

答案 0 :(得分:4)

只需使用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有效。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

为了完整起见,我会做以下事情:

import com.google.common.base.Strings;

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