Java 加入“;Http://quot;在我的地址之前
我正在从源中提取地址,但某些提取没有地址的http://infront,如何检查地址是否有http://infront,如果没有,如何添加http://infront?:O 得到这个错误,我猜是由于“缺少”http://infortJava 加入“;Http://quot;在我的地址之前,java,Java,我正在从源中提取地址,但某些提取没有地址的http://infront,如何检查地址是否有http://infront,如果没有,如何添加http://infront?:O 得到这个错误,我猜是由于“缺少”http://infort java.net.MalformedURLException: no protocol: www.speedtest.net at java.net.URL.<init>(URL.java:583) at java.net.URL.<init>
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("");
}
}
java.net.MalformedURLException:无协议:www.speedtest.net
在java.net.URL.(URL.java:583)
位于java.net.URL。(URL.java:480)
位于java.net.URL。(URL.java:429)
在a.PageRead.r(PageRead.java:29)
在a.ThreadDownloaderWriter.run处(ThreadDownloaderWriter.java:35)
运行(Thread.java:722)
公共StringBuilder readPage(){
试一试{
URL=新URL(this.strURL);
System.out.println(this.strURL);
BufferedReader=新的BufferedReader(新的InputStreamReader(url.openStream());
弦线;
StringBuilder sb=新的StringBuilder();
而((line=reader.readLine())!=null){
sb.追加(第+行“\n”);
}
reader.close();
归还某人;
}捕获(格式错误){
e、 printStackTrace();
返回新的StringBuilder(“”);
}捕获(IOE异常){
e、 printStackTrace();
返回新的StringBuilder(“”);
}
}
您可以使用startsWith()
方法检查地址是否以“http://”开头:
url.startsWith("http://");
如果是这样,则返回true
关于缺少“http://”的问题,您可能是对的。似乎表明协议(此处为http)是强制性的。您问题的字面答案如下所示:
字符串url=…;//无论什么
如果(!url.startsWith(“http://”)){
url=“http://”+url;
}
但这仍然不是一个很好的解决方案。例如,关于https
url呢?ftp甚至文件系统URL(文件://
)如何。然后,您可能需要考虑区分大小写(“http://
”!=”http://
“!=”http://
”,尽管实际上它们都表示相同的意思,并且会被Java的URL
类接受)
你可以试着更小心一点:
if (!url.toLowerCase().matches("^\\w+://.*")) {
url = "http://" + url;
}
这将URL字符串的开头与任何“单词字符”匹配,后跟冒号(:
)和两个斜杠(/
),如果URL的协议部分缺失,则默认为http://
。这将覆盖比原始(字面)答案多得多的案例
最终,如果有人给你一个没有协议部分的URL,那它就是一个无效的URL
你应该考虑拿起一本关于java编程的书,因为这些都是基本的逻辑/java API问题。
< p>嗯,根据你的堆栈跟踪,我会说在你调用<代码>新URL(YouURL)< /C> >之前,检查<代码>你的YouLue<代码>是否以<强> http://,<强> http://,<强> ftp://或您认为需要检查的任何其他协议:if(!your_url.startsWith("http://"))
如果缺少,请在您的\u url
前面添加默认的http://
your_url = "http://" + your_url;
您认为此错误是由http://?引起的吗 是,在堆栈跟踪中:
java.net.MalformedURLException: no protocol: www.speedtest.net
您的url是www.speedtest.net
,它必须是http://www.speedtest.net
。该错误是由缺少协议引起的。或者,它不必是http://
,只需是一个有效的协议,如https://
,文件://
,等等
String url = "www.speedtest.net"
if (!url.toLowerCase().startsWith("http://")) url = "http://" + url
但是,这并不适用于所有情况,因为某些网站可能有https://或其他协议。当前投票率最高的答案包含不正确的正则表达式。以下解决方案将匹配任何协议,大写或小写:
String s = "www.google.com";
Pattern p = Pattern.compile("http://");
Matcher m = p.matcher(s);
if (m.lookingAt()){
System.out.println("Its already there");
}
else{
String ss = "http://"+s;
System.out.println(ss);
}
if (!url.matches("^\\w+?://.*")) {
url = "http://" + url;
}
请显示您正在使用的代码。我认为这很可能(告诉java使用端口80),并且您可以轻松地检查自己。此外,查看抛出异常的代码行也会有所帮助。这对于使用
String#startsWith
可以实现的功能来说是一种过分的做法,而且它不能解释s
是大写的。为什么模式#compile中有这么多括号?您匹配的正则表达式不正确,您只匹配一个单词字符,而不是整个url字符串,如果您想这样做,应该是“^\\w+:/。+”。@AdamBatkin,请记住,只有正则表达式匹配整个目标,方法匹配才会返回true,您仍然需要在“/”之后附加“+”,否则“^\\w+:/”将返回true的唯一时间是字符串为“:/”时。这是在java中快速测试正则表达式的一个很好的参考