如何在不编写正则表达式的情况下将协议设置为URI

时间:2014-07-30 19:07:41

标签: java

我有一个应用程序,它接受用户输入的URL并获取它。它必须是带有协议的有效URL。 但是,用户可能忘记包含协议。

例如,当我访问此网站时,我只需输入

stackoverflow.com

而不是

http://stackoverflow.com

因为我知道我的浏览器会为我处理它(连同自动完成,所以我通常只需要写stack

所以我继续

String lnk = "stackoverflow.com";
try {
  URL url = new URL(lnk);  
} catch (Exception e ) {
  e.printStackTrace();
}

但它抛出异常

java.net.MalformedURLException: no protocol: stackoverflow.com

探索URL类,也没有setProtocol方法,因此这可能无济于事。

如果我想为可能有或没有指定协议的输入字符串设置协议,我应该使用什么?我可以手动进行字符串扫描和检查。

2 个答案:

答案 0 :(得分:3)

URL类有一个构造函数,它将协议String作为输入:

URL.URL(String protocol, String host, String file)

e.g。 URL url = new URL("http", "stackoverflow.com", "");

如果需要添加协议以防丢失,则以下代码段可用于httphttps

if(!lnk.startsWith("http://") && !lnk.startsWith("https://")) {
    lnk = "http://" + lnk;
}

答案 1 :(得分:2)

你可以使用以下方法检查它是否包含http:

...
if(!lnk.startsWith("http://") {
   lnk = "http://" + lnk;
}

希望这有帮助。