在java中,读取url并将其拆分为部分的最佳方法是什么?

java string url split

20401 观看

4回复

124 作者的声誉

首先,我知道还有其他类似的帖子,但由于我使用的是URL,而且我并不总是确定我的分隔符是什么,我觉得我可以发布我的问题。我的任务是制作一个原始的Web浏览器。我有一个textField,用户输入所需的URL。然后,我显然必须导航到该网页。这是我老师对我的代码看起来有点像的一个例子。这是我要发送到我的套接字的代码。示例网址:http//en.wikipedia.org/wiki/Hypertext_Transfer_Protocol

 GET /wiki/Hypertext_Transfer_Protocol HTTP/1.1\n
Host: en.wikipedia.org\n
\n

所以我的问题是这样的:我将在url中读取一个完整的字符串,那么如何只提取“en.wikipedia.org”部分和扩展名呢?我试过这个测试:

 String url = "http://en.wikipedia.org/wiki/Hypertext Transfer Protocol";
    String done = " ";
    String[] hope = url.split(".org");

    for ( int i = 0; i < hope.length; i++)
    {
        done = done + hope[i];
    }
    System.out.println(done);

这只是打印出没有“.org”的URL。我想我走在正确的轨道上。我只是不确定。另外,我知道网站可以有不同的结尾(.org,.com,.edu等),所以我假设我必须有一些if语句来补充可能的不同结局。基本上,我如何将url放入我需要的两个部分?

作者: art3m1sm00n 的来源 发布者: 2013 年 2 月 25 日

回应 4


30

177462 作者的声誉

URL类几乎做到这一点,看看教程。例如,给定此URL:

http://example.com:80/docs/books/tutorial/index.html?name=networking#DOWNLOADING

这是您可以获得的信息:

protocol = http
authority = example.com:80
host = example.com
port = 80
path = /docs/books/tutorial/index.html
query = name=networking
filename = /docs/books/tutorial/index.html?name=networking
ref = DOWNLOADING
作者: Óscar López 发布者: 2013 年 2 月 25 日

1

17372 作者的声誉

这是您应该如何拆分URL部分:http//docs.oracle.com/javase/tutorial/networking/urls/urlInfo.html

作者: piokuc 发布者: 2013 年 2 月 25 日

1

1505 作者的声誉

而不是url.split(".org");尝试url.split("/");迭代你的字符串数组。

或者你可以查看正则表达式。这是一个很好的例子

祝你的作业好运。

作者: Reza Shirazian 发布者: 2013 年 2 月 25 日

0

1 作者的声誉

您可以使用String类split()并将结果存储到String数组中,然后迭代数组并将变量和值存储到Map中。

public class URLSPlit {
    public static Map<String,String> splitString(String s) {
        String[] split = s.split("[= & ?]+");
        int length = split.length;
        Map<String, String> maps = new HashMap<>();

        for (int i=0; i<length; i+=2){
              maps.put(split[i], split[i+1]);
        }

        return maps;
    }

    public static void main(String[] args) {
        String word = "q=java+online+compiler&rlz=1C1GCEA_enIN816IN816&oq=java+online+compiler&aqs=chrome..69i57j69i60.18920j0j1&sourceid=chrome&ie=UTF-8?k1=v1";
        Map<String, String> newmap =  splitString(word);

        for(Map.Entry map: newmap.entrySet()){
            System.out.println(map.getKey()+"  =  "+map.getValue());
        }
    }
}
作者: Abhinav Katyayen 发布者: 2019 年 2 月 7 日
32x32