Java:如何在“http://”和第一个“/”之后获取文本?在第一次“/”出现后?

时间:2014-03-08 09:57:07

标签: java android regex

我仍然是正则表达式的新手,“正则表达式”等...在Java中。

如果我有这样的网址:“http://somedomain.someextention/somefolder/.../someotherfolder/somepage

获得最简单的方法是什么:

  • “somedomain.someextention”?
  • “somefolder /.../ someotherfolder / somepage”?
  • “somepage”?

谢谢!

5 个答案:

答案 0 :(得分:4)

您不必(也可能不应)在此处使用正则表达式。而是使用定义的类来处理这样的事情。您可以使用例如URLURIFile

String address = "http://somedomain.someextention/somefolder/.../someotherfolder/somepage";

URL url = new URL(address);
File file = new File(url.getPath());

System.out.println(url.getHost());
System.out.println(url.getPath());
System.out.println(file.getName());

Outpit:

somedomain.someextention
/somefolder/.../someotherfolder/somepage
somepage

现在,您可能需要在资源路径的开头摆脱/。如果资源以substring(1)开头,您可以在此使用/


但如果你真的必须使用正则表达式,你可以试试

^https?://([^/]+)/(.*/([^/]+))$

现在

  • 第1组将包含主机名
  • 第2组将包含资源路径
  • 第3组将包含资源名称

答案 1 :(得分:3)

获取这些组件的最佳方法是使用URI类; e.g。

    URI uri = new URI(str);
    String domain = uri.getHost();
    String path = uri.getPath();
    int pos = path.lastIndex("/");
    ...
    // or use File to parse the path string.

可以使用原始网址字符串上的正则表达式来执行此操作,但是您可能无法正确处理网址中可能存在的所有可变性。 (提示:@Pchenko提供的正则表达式不是:-))你肯定需要使用解码器来处理可能的百分比编码。

答案 2 :(得分:0)

这不是正则表达式或URI使用,而是简单的子字符串代码作为excersise材料。缺少一些角落案例格式验证。

int lastDelim = str.lastIndexOf('/);
if (lastDelim<0) throw new IllegalArgumentException("Invalid url");
int startIdx = str.indexOf("//");
startIdx = startIdx<0 ? 0 : startIdx+2;
int pathDelim = str.indexOf('/', startIdx);
String domain = str.substring(startIdx, pathDelim);
String path = str.substring(pathDelim+1, lastDelim);
String page = str.substring(lastDelim+1);

答案 3 :(得分:0)

如果您想使用正则表达式来解码URL而不是使用URI类,如前面的答案所述,下面的链接提供了一个很好的正则表达式教程,它解释了解码示例URL。你可以在那里学习并尝试一下。

http://www.beedub.com/book/2nd/regexp.doc.html

答案 4 :(得分:0)

它不是正则表达式,也不是可扩展的,它可以工作:

public class SomeClass
{
    public static void main(String[] args)
    {

        SomeClass sclass = new SomeClass();
        String[] string = 
            sclass.parseURL("http://somedomain.someextention/somefolder/.../someotherfolder/somepage");

        System.out.println(string[0]);
        System.out.println(string[1]);
        System.out.println(string[2]);
    }

    private String[] parseURL(String url)
    {
        String part1 = url.substring("http://".length(), url.indexOf("/", "http://".length()));

        String part2 = url.substring("http://".length() + part1.length() + 1, url.lastIndexOf("/"));

        String part3 = url = url.substring(url.lastIndexOf("/") + 1);

        return new String[] { part1, part2, part3 };
    }
}

输出:

somedomain.someextention
somefolder/.../someotherfolder
somepage