【发布时间】:2012-02-20 14:55:38
【问题描述】:
如何检查协议是否存在于 URL 中,如果不存在则需要附加它。 有没有什么类可以在java中实现这一点? 例如:字符串 URL = www.google.com
【问题讨论】:
如何检查协议是否存在于 URL 中,如果不存在则需要附加它。 有没有什么类可以在java中实现这一点? 例如:字符串 URL = www.google.com
【问题讨论】:
只需使用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 等
假设你有String url = www.google.com。对于检查协议标识符的目标,字符串类方法就足够了。例如,url.startsWith("https://") 将检查特定字符串是否以给定的协议名称开头。
但是,这些控件是否足以进行验证?
我认为他们不够。首先,您应该定义一个有效协议标识符的列表,例如一个字符串数组,如{"http", "ftp", "https", ...}。然后,您可以使用正则表达式 ("://") 解析您的输入字符串,并测试您的 URL 标头是否属于有效协议标识符列表。并且域名验证方法超出了这个问题,您也可以/应该使用不同的技术来处理它。
【讨论】:
为了完整起见,我会执行以下操作:
import com.google.common.base.Strings;
private static boolean isUrlHttps(String url){
if(Strings.isNullOrEmpty(url))
return false;
return url.toLowerCase().startsWith("https://");
}
【讨论】: