Обнаружение и преобразование URL в String Java. Является ли регулярное выражение лучше или даже быстрее? - PullRequest
0 голосов
/ 17 ноября 2010

Ниже код обнаруживает и преобразует URL-адреса в строку. Есть ли более быстрый или более элегантный способ сделать этот блок кода?:

public static String detectAndConvertURLs(String text) {
    String[] parts = text.split("\\s");
    String rtn = text;
    for (String item : parts)
        try {
          // adjustment based one of the answers 
          Pattern p = Pattern.compile("((mailto\\:|(news|(ht|f)tp(s?))\\://){1}\\S+)");
          Matcher m = p.matcher(item);
          if( m.matches() ) item = m.group(1);

            URL url = new URL(item);
            String link = url.getProtocol() + "://" + url.getHost() + "/" + (url.getPath() == null ? "" : url.getPath()) + (url.getQuery() == null ? "" : "?" + url.getQuery());
            rtn = StringUtils.replace(rtn, item, "<a rel=\"nofollow\" href=\"" + link + "\">" + link + "</a> ");
        } catch (MalformedURLException ignore) {
        }
    return rtn;
}

1 Ответ

1 голос
/ 17 ноября 2010

Я думаю, я бы использовал регулярные выражения, такие как:

public static String detectAndConvertURLs(String text) {
   //Regex pattern (unescaped), matches any Internet URL: 
   //((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+)
   Pattern p = Pattern.compile( "((mailto\\:|(news|(ht|f)tp(s?))\\://){1}\\S+)" );
   Matcher m = p.matcher( text );
   if( m.matches() ){
      return m.group(1);
   }else return null;
}

Я только что взял это регулярное выражение с этого сайта полезных выражений регулярных выражений:

http://regexlib.com/Search.aspx?k=URL

Быстрый поиск в Google даст много ресурсов для выражения регулярных выражений:

http://www.google.com/search?q=regex+match+url&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a

Возможно, вам придется немного помассировать регулярное выражение, чтобы обрезать материал в начале или конце, в зависимости от вашего использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...