2012-03-06 4 views
1

У меня есть строка как исходный код HTML. Я хочу получить только ссылки из этой строки и поместить эти ссылки в ArrayList. Как вы знаете, я хочу получить строки между <a href="THE LINK I WANT"> Но я хочу сделать это без использования каких-либо внешних библиотек. Как я могу сделать это с помощью простого алгоритма, используя классы и циклы String? Спасибо!Получение ссылок из html исходного кода

+8

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

+0

Потому что это задание, и мой инструктор хочет, чтобы я сделал это с помощью простого алгоритма. Это просто? – El3ctr0n1c4

+0

Это не так сложно, вы можете выполнить поиск по html для '', в этом случае нет 'href', и вам нужно снова начать ищет '

ответ

1

Я нашел ответ !!!!!

public ArrayList<String> getLinks() { 

    String link = ""; 

    for(int i = 0; i<url.length()-6; i++) { 
     if(url.charAt(i) == 'h' && url.charAt(i+1) == 'r') { 
      for(int k = i; k<url.length();k++){ 
       if(url.charAt(k) == '>'){ 
        link = url.substring(i+6,k-1); 
        links.add(link); 
        // Break the loop 
        k = url.length(); 
       } 
      } 
     } 
    } 
    return links; 
5

Java Regex API не является подходящим инструментом для достижения вашей цели. Используйте эффективные, безопасные и хорошо проверенные инструменты высокого уровня, упомянутые в других ответах.

Если вопрос касается скорее Regex API, чем проблемы в реальной жизни (обучение целей, например) - вы можете сделать это с помощью следующего кода:

String html = "foo <a href='link1'>bar</a> baz <a href='link2'>qux</a> foo"; 
Pattern p = Pattern.compile("<a href='(.*?)'>"); 
Matcher m = p.matcher(html); 
while(m.find()) { 
    System.out.println(m.group(0)); 
    System.out.println(m.group(1)); 
} 

и вывод:

<a href='link1'> 
link1 
<a href='link2'> 
link2 

Обратите внимание, что ленивый/неохотный квалификатор *? должен использоваться, чтобы уменьшить группировку на единый тег. Группа 0 - это весь матч, группа 1 - следующее групповое совпадение (следующая пара скобок).


ПРИМЕЧАНИЕ, чтобы рассмотреть:

Использование регулярных выражений, чтобы вытащить значения из HTML всегда ошибка. Синтаксис HTML намного сложнее, чем он может появиться, и очень легко для страницы вырвать даже очень сложное регулярное выражение.

Вместо этого используйте HTML Parser. См. Также What are the pros and cons of the leading Java HTML parsers?

+0

Поскольку я изложил свой вопрос, я не хочу использовать внешние библиотеки. Я нашел ответ. Тем не менее, спасибо за ваш ответ – El3ctr0n1c4

+0

Ваш метод, как указано в вашем ответе, - это всего лишь обходной путь. Не правильный метод .. !! .. Вы можете хотя бы использовать «регулярное выражение», чтобы решить вашу проблему .. !! (и его не внешняя библиотека) –

+0

На самом деле это не обязательно правильно, потому что я хочу, чтобы вы просто простой алгоритм. Я решил, хотя: D – El3ctr0n1c4

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