我从一个来源提取地址,但有些提取物没有http://地址的前面,我如何检查地址是否有http://如果他们不是我如何添加http:// infront?:o
得到这个错误,我猜是由于http:// infront的"缺乏"
java.net.MalformedURLException: no protocol: www.speedtest.net
at java.net.URL.<init>(URL.java:583)
at java.net.URL.<init>(URL.java:480)
at java.net.URL.<init>(URL.java:429)
at a.PageRead.r(PageRead.java:29)
at a.ThreadDownloaderWriter.run(ThreadDownloaderWriter.java:35)
at java.lang.Thread.run(Thread.java:722)
public StringBuilder readPage() {
try {
URL url = new URL(this.strURL);
System.out.println(this.strURL);
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
StringBuilder sb = new StringBuilder();
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
reader.close();
return sb;
} catch (MalformedURLException e) {
e.printStackTrace();
return new StringBuilder("");
} catch (IOException e) {
e.printStackTrace();
return new StringBuilder("");
}
}
Run Code Online (Sandbox Code Playgroud)
Ada*_*kin 18
您问题的字面答案如下所示:
String url = ... ; // Whatever
if (!url.startsWith("http://")) {
url = "http://" + url;
}
Run Code Online (Sandbox Code Playgroud)
但这仍然不是一个很好的解决方案.例如,httpsURLS呢?如何ftp甚至文件系统URL(file://).然后你可能想要考虑区分大小写的事情(" http://"!=" HTTP://"!=" HttP://"即使实际上它们都意味着同样的事情并且将被Java的URL类接受).
你可以尝试更小心一点:
if (!url.toLowerCase().matches("^\\w+://.*")) {
url = "http://" + url;
}
Run Code Online (Sandbox Code Playgroud)
这匹配URL字符串的开头与任何"单词字符"后跟冒号(:)和两个斜杠(//),然后默认情况下,http://如果缺少URL的协议部分.这将覆盖比原始(文字)答案更多的案例.
最终,如果有人给你一个没有协议部分的URL,那么它就是一个无效的URL.
您应该考虑阅读一本关于Java编程的书,因为这些都是基本的逻辑/ Java API问题.
您可以使用以下startsWith()方法检查地址是否以"http://"开头:
url.startsWith("http://");
Run Code Online (Sandbox Code Playgroud)
true如果是这样,则返回.
对于缺少"http://"的问题,你可能是正确的.该文档似乎表明该协议(此处为http)是强制性的.
| 归档时间: |
|
| 查看次数: |
4865 次 |
| 最近记录: |