2013-11-22 3 views
1

Я получаю чистый способ разбора адреса типа «www.google.com» в URL-объект, который предполагает протокол http, если протокол не указан (но будет работать корректно для "https://www.google.com").URL-адрес анализа синтаксического анализа URL-адреса без протока

Конструктор java.net.URL правильно выплескивает эти адреса как неверные URL-адреса, и я не могу найти встроенный метод для этого.

Доступны нулевые интернет-точки, предлагающие поиск «: //» или аналогичные. Мне нужен чистый способ сделать это, чтобы правильно разобрать адрес.

+0

Пожалуйста, не стесняйтесь объяснять «чистый путь» для синтаксического анализа, который не требует синтаксического анализа, поскольку вы заявили, что не хотите, чтобы ваш синтаксический анализ фактически выполнял синтаксический анализ. В конце концов, [синтаксис IETF RFC для URI] (http://www.ietf.org/rfc/rfc2396.txt) специально вызывает ': //' как соответствующую конструкцию (см. «Синтаксические компоненты URI»). Как вы планируете разбор * любого * URL-адреса, если алгоритм синтаксического анализа не может следовать спецификации? – CommonsWare

+0

@CommonsWare Обязательно. Чистый способ решить эту проблему предполагает, что я не пишу собственный парсер или не просматриваю строку для:: //. У Android уже есть надежные парсеры, мне просто нужно знать правильные вызовы API для использования. Я рад использовать синтаксический анализатор, я не рад взломать что-то ненадежное, обыскав строку. – Hbcdev

+0

«У Android уже есть надежные парсеры, мне просто нужно знать правильные вызовы API для использования» - их нет, AFAIK. Возможно, есть сторонний фрагмент кода или библиотека, которую вы можете использовать, поэтому я переделал это в java. – CommonsWare

ответ

1

Это вы что искали?

String url = ... 
      if (!url.startsWith("https://") && !url.startsWith("http://")){ 
      url = "http://" + url; 
     } 
+1

Не совсем. Существует намного больше схем за пределами http и https, которые этот метод не учитывает. Он также не обрабатывает случай строки url, начиная с пробела. Я за чем-то более надежным, чем это. – Hbcdev

+0

@Hbcdev: «Существует намного больше схем за пределами http и https, которые этот метод не учитывает» - однако есть конечное и счетное количество схем, которые будут иметь значение. В конце концов, 'java.net.URL' обрабатывает только пять, и вам было удобно пользоваться этим. – CommonsWare

-1

Я бы с нижеследующим, по крайней мере до тех пор, пока представлен тестовый пример, который не работает:

URL url=null; 

try { 
    url=new URL(yourString); 
} 
catch (MalformedURLException e) { 
    url=new URL("http://"+yourString); 
} 

В принципе, повторить предложенный URL с префиксом http://, и если анализирует, предположим, что это сценарий без схемы.

+0

Что делать, если URL-адрес с https? –

+0

@AlexArvanitidis: вы можете создать более сложный резервный механизм (например, попробовать исходный URL-адрес, а затем попробовать его с помощью 'https: //', а затем попробовать с помощью 'http: //'). – CommonsWare

Смежные вопросы