在我的地址前添加"Http://"

Cod*_*uru 3 java

我从一个来源提取地址,但有些提取物没有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问题.


kga*_*ron 6

您可以使用以下startsWith()方法检查地址是否以"http://"开头:

url.startsWith("http://");
Run Code Online (Sandbox Code Playgroud)

true如果是这样,则返回.

对于缺少"http://"的问题,你可能是正确的.该文档似乎表明该协议(此处为http)是强制性的.