web-dev-qa-db-ja.com

URLのパスを取得する方法

URLを持っています、そのパス部分を取得する方法は?

http://www.costo.com/test1/test2

「test1/test2」の入手方法

18
user496949

あなたはこのようなものが欲しい:

String path = new URL("http://www.costo.com/test1/test2").getPath();

実際には/test1/test2が得られます。必要なものを取得するには、最初の/を削除する必要があります。

path = path.replaceFirst("/", "");

これで、pathtest1/test2が作成されます。

45
WhiteFang34

URLからパスを抽出するだけのJava URLクラスを使用してパフォーマンスに疑問があり、これはやり過ぎだと思いました。

したがって、3つのメソッドを作成しました。これらのメソッドはすべて、特定のURLからパスを抽出する方法が異なります。

  1. 最初のメソッドは、Java URLクラスのRL.getPathメソッドを使用します。
  2. 2番目の方法はregexを使用しますSOで見つかりました(ソースリンクを失った場合は、ここで著者にクレジットを付与します)。
  3. 3番目の方法は、同じ結果を得るためにarray-split and joinを使用します。

3つのメソッドはすべて、指定されたURLに対して1000000回呼び出されます。

結果は次のとおりです。

#1 (getPathviaURL)   took:    860ms
#2 (getPathViaRegex) took:   3763ms
#3 (getPathViaSplit) took:   1365ms

コード-自由に最適化してください:

public static void main(String[] args) {


        String Host = "http://stackoverflow.com/questions/5564998/how-to-get-the-path-of-a-url";

        long start1 = System.currentTimeMillis();
        int i = 0;
        while (i < 1000000) {
            getPathviaURL(Host);
            i++;
        }
        long end1 = System.currentTimeMillis();

        System.out.println("#1 (getPathviaURL) took: " + (end1 - start1) + "ms");
        Pattern p = Pattern.compile("(?:([^:\\/?#]+):)?(?:\\/\\/([^\\/?#]*))?([^?#]*)(?:\\?([^#]*))?(?:#(.*))?");

        long start2 = System.currentTimeMillis();
        int i2 = 0;
        while (i2 < 1000000) {
            getPathViaRegex(Host, p);
            i2++;
        }
        long end2 = System.currentTimeMillis();
        System.out.println("#2 (getPathViaRegex) Took: " + (end2 - start2) + "ms");

        long start3 = System.currentTimeMillis();
        int i3 = 0;
        while (i3 < 1000000) {
            getPathViaSplit(Host);
            i3++;
        }
        long end3 = System.currentTimeMillis();
        System.out.println("#3 (getPathViaSplit) took: " + (end3 - start3) + "ms");



    }

    public static String getPathviaURL(String url) {
        String path = null;
        try {
            path = new URL(url).getPath();
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return path;
    }

    public static String getPathViaRegex(String url, Pattern p) {
        Matcher m = p.matcher(url);

        if (m.find()) {
            return m.group(3);
        }
        return null;
    }

    public static String getPathViaSplit(String url) {
        String[] parts = url.split("/");

        parts = Arrays.copyOfRange(parts, 3, parts.length);
        String joined = "/" + StringUtils.join(parts, "/");

        return joined;
    }
9
Aydin K.
 URL url = new  URL("http://www.google.com/in/on");
 System.out.println(url.getPath());

また見なさい

7
Jigar Joshi

URL クラスのURL.getPath()メソッドを使用します。

3
Vladimir Ivanov

あなたはこれを行うことができます:

    URL url = new URL("http://www.costo.com/test1/test2");
    System.out.println(url.getPath());
3
MarcoS

アプリケーションのURLから http:// localhost:8080/test1/test2/main.jsp のようなものから取得したい場合。使用できる

request.getRequestURI() //result will be like test1/test2
0
Bhaskara Arani