2016-04-04 15 views
0

Я работаю над Java-методом, который отличает абсолютные и относительные URL-адреса от адресной строки браузера, а не от того, как будет выглядеть строгий анализатор URL. То есть, я хочу, чтобы он распознавал URL как абсолютный, если он начинается с хоста, независимо от того, присутствует ли схема. Таким образом, он правильно распознает URL-адреса, относящиеся к схеме (например, //example.com), а URL-адреса со схемой полностью опущены (например, example.com, wikipedia.org, lots.and-lots.of.domains.com.ng). Метод I», в настоящее время использует выглядит примерно такПризнать абсолютный веб-адрес даже без схемы

public String checkPossiblyAbsolute(String url) { 
    if (url.matches("^(\\/\\/)?([-_A-Za-z0-9]+\\.)+\\w{2,3}(\\/.*)?$")) { 
     if (url.startsWith("//")) url = "http:" + url; 
     else url = "http://" + url; 
    } 
    return url; 
} 

В основном, он проверяет, точку разделенных последовательности символов A-Z, a-z, 0-9, - и _ где последняя последовательность (ДВА) содержит ровно- или 3 буквы. Кроме того, строка может начинаться с необязательного //. Мои тесты работают так, как я ожидал, но я действительно хочу найти более легкий (или, по крайней мере, более читаемый) способ сделать это. Есть предположения?

ответ

0

К сожалению, Java не позволяет избежать двойного выхода из строя. (Некоторые языки допускают @"une\scapedRegex").

Есть некоторые изменения, которые вы можете внести в синтаксис регулярных выражений.

  • \\. может стать [.] не короче, но ИМХО более читаемым.
  • То же самое с \\/. Сделайте это [/].
  • Вы можете избавиться от A-Z, если используете нечувствительный к регистру режим. Не стоит этого, если у вас есть только один A-Z.

Там не намного больше, вы можете сделать, кроме навели переменных. Опять же, может быть, не стоит того, если у вас есть только несколько избыточности, но это может улучшить читаемость. Вы используете Java, поэтому в любом случае вы не выигрываете в кодовом гольф-поле.