Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 加入“;Http://quot;在我的地址之前_Java - Fatal编程技术网

Java 加入“;Http://quot;在我的地址之前

Java 加入“;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>

我正在从源中提取地址,但某些提取没有地址的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>(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中快速测试正则表达式的一个很好的参考