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

5
如何检查URL中是否存在协议,如果不存在则需要添加。 在Java中是否有任何类可以实现此功能? 例如:String URL = www.google.com
需要获取http://www.google.com
3个回答

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是有效的。


2
对于 httpsfile 等,!a_url.matches("\\w+\\:.*") - Joop Eggen

2

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

然而,这些控件是否足够进行验证?

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


为了完整起见,我会这样做: ' private static boolean isUrlHttps(String url){ if(Strings.isNullOrEmpty(url)) return false; return url.toLowerCase().startsWith("https://"); }' - Shlomi

1

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

import com.google.common.base.Strings;

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接