2012-03-06 3 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은 목표를 달성하기위한 적절한 도구가 아닙니다. 다른 답변에서 언급 된 효율적이고 안전하며 잘 테스트 된 고급 도구를 사용하십시오.

실생활 문제보다는 정규식 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 

lazy/reluctant 한정자 *에 유의하십시오. 단일 태그에 대한 그룹화를 줄이기 위해 사용해야합니다. 그룹 0은 전체 일치이고, 그룹 1은 다음 그룹 일치 (다음 괄호 쌍)입니다.


메모

고려해야 할 : HTML에서 값을 끌어 정규식을 사용

항상 실수이다. HTML 문법은 훨씬 더 복잡하여 처음에는 나타날 수 있으며 아주 복잡한 정규 표현식조차도 페이지에서 쉽게 찾을 수 있습니다.

대신 HTML Parser을 사용하십시오. 또한 What are the pros and cons of the leading Java HTML parsers?

+0

제 질문에 언급했듯이 외부 라이브러리를 사용하고 싶지 않습니다. 나는 그 해답을 발견했다. 그럼에도 불구하고 귀하의 대답을 주셔서 감사합니다 – El3ctr0n1c4

+0

당신의 대답은 귀하의 답변에 명시된 바와 같이, 그냥 해결 방법입니다 .. 적절한 방법 .. !! 당신은 적어도 당신의 문제를 해결하기 위해 "정규식"을 사용할 수 있습니다 .. !! (그리고 외부 라이브러리가 아닙니다.) –

+0

사실 그것은 단순한 알고리즘을 원하기 때문에 반드시 적절하지는 않습니다. 나는 해결했다 : D – El3ctr0n1c4

관련 문제