在java中读取字符串,直到第三次匹配某个字符

时间:2015-08-04 15:05:59

标签: java

我正在阅读包含网址的文件,例如http://www.espncricinfo.com/netstorage/817215.json?xhr=1),如何在第3个(' /')之前获取类似(http://www.espncricinfo.com/)的字符串。

4 个答案:

答案 0 :(得分:1)

一种方法:使用RegEx

    String link = "http://www.espncricinfo.com/netstorage/817215.json?xhr=1";
    Pattern pattern = Pattern.compile("((https?://)[^/]+/?)");
    Matcher matcher = pattern.matcher(link);

    while (matcher.find()) {
        System.out.println(matcher.group(1));
    }

更好的方法:使用URL包:

    URL url = new URL(link);
    System.out.println(url.getHost());

答案 1 :(得分:0)

最简单的方法似乎是创建URL对象并从中获取主机名

String url = "http://www.espncricinfo.com/netstorage/817215.json?xhr=1";
URL u = new URL(url);
System.out.println(u.getHost());

答案 2 :(得分:0)

使用java.net.URL:

URL url = new URL("http://www.espncricinfo.com/netstorage/817215.json?xhr=1");
String before_3rd = url.getProtocol() +"://" + url.getHost() + url.getPort();

答案 3 :(得分:0)

您可以使用URI方法resolve

URI uri = URI.create("http://www.espncricinfo.com/netstorage/817215.json?xhr=1&a=b");
String result = uri.resolve("/").toString();

此方法基本上使用您的原始URI作为计算具有不同路径的类似URI的基础。通过给它路径"/",这意味着你将获得原始的基本URI(包括用户信息或端口,如果它们在那里)。打印上面的结果将给出:

http://www.espncricinfo.com/

如果您的原始网址是:

http://user:pass@www.espncricinfo.com:8080/netstorage/817215.json?xhr=1

结果将是:

http://user:pass@www.espncricinfo.com:8080/