Как получить путь URL - PullRequest
       10

Как получить путь URL

17 голосов
/ 06 апреля 2011

Есть URL, как получить его часть пути?

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

Как получить "test1 / test2"

Ответы [ 6 ]

44 голосов
/ 06 апреля 2011

Вы хотите что-то вроде этого:

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

На самом деле это даст вам /test1/test2.Вам просто нужно удалить первый /, чтобы получить то, что вы хотите:

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

Теперь у вас будет test1/test2 в path.

8 голосов
/ 11 января 2016

У меня были сомнения в производительности при использовании класса URL Java для простого извлечения пути из URL, и я подумал, что это избыточное убийство.

Поэтому я написал три метода, каждый из которых использует другой способ извлечения путииз данного URL.

  1. 1-й метод использует URL.getPath из Java-класса URL.
  2. 2-й метод использует regex Я нашел в SO (я потерял ссылку на источник, иначе я бы дал кредит автору прямо здесь).
  3. 3-й метод использует разбиение массива и соединение для получения того жерезультат.

Все три метода вызываются 1000000 раз для данного URL.

Результат:

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

Код - не стесняйтесь оптимизировать его:

public static void main(String[] args) {


        String host = "/6914058/kak-poluchit-put-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;
    }
7 голосов
/ 06 апреля 2011
 URL url = new  URL("http://www.google.com/in/on");
 System.out.println(url.getPath());

См. Также

3 голосов
/ 06 апреля 2011

Вы можете сделать это:

    URL url = new URL("http://www.costo.com/test1/test2");
    System.out.println(url.getPath());
3 голосов
/ 06 апреля 2011

использование URL.getPath() метод URL класс

0 голосов
/ 29 января 2019

Если вы хотите получить его из URL-адреса вашего приложения, например, http://localhost:8080/test1/test2/main.jsp. Использование можно использовать

request.getRequestURI() //result will be like test1/test2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...