2014-12-09 1 views
0

String [] urls는 문자열을 문자열로 포함합니다 (코드는 각 URL의 inputStream을 읽습니다).첫 번째 인덱스에서 멈추는 try-catch 루프의 경우

for 루프의 종료 조건이 '< urls.length'인 경우에도 첫 번째 인덱스 (인덱스 0) 다음에 String [] URL의 인덱스를 반복 할 수 없습니다.

참고 : String [] urls size가 1 일 때 작동합니다. String [] urls size가 2 인 경우 테스트합니다.이 경우 첫 번째 인덱스 만 있지만 두 번째 인덱스는 반복되지 않습니다. 그리고 나는 단지 <body> 블록들 사이에만 관심이 있습니다 (따라서 if (s.contains("<br>"))

왜 이런 일이 일어나는가에 대한 아이디어가 있습니까? 편집

public void readData(String[] urls) { 
    for (int i=0; i<urls.length; i++) { 
     System.out.println(i); //for a String[] urls of size 2, only 0 gets printed. 
     //I want both 0 and 1 printed 

     String str=""; 

     try { 
      URL url=new URL(urls[i]); 
      URLConnection conn=url.openConnection(); 
      BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

      String s; 

      while ((s = in.readLine())!=null) { 
       if (s.contains("<br>")) { 
        str += s; 
       } 
      } 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
      System.out.println(str); // for String[] urls of size 2, 
      //only the inputstream of urls' first index gets printed. 
      //I want both to be printed 
    } 
} 

: 이것은 내가

<html> 
<head> 
<title> 
Title 
</title> 
</head> 
<body> 
Name1 Age1 Hometown1<br> 
Name2 Age2 Hometown2<br> 
Name3 Age3 Hometown3<br> 
</body> 
</html> 
+1

디버거에 던져 당신이 실제로있다. 어쩌면에서 System.out.println (urls.length)만큼이 0>의로, 그것은 반복해야 통과 얼마나 많은 URL을 참조하십시오. – Kevin

+1

왜 루프를 제거하고 하나의 URL로 테스트하지 않는가? 그 후에는 연결을 닫아야합니다. 그리고 끝나면 나머지 URL에 대한 전체 프로세스를 완료하는 방법을 생각하십시오. –

+0

은 스택 트레이스를 공유합니다. – Panther

답변

2

내가이 테스트 한 (문자열 []의 URL의 각 요소에 가져다 무엇을) 읽을 수있는 HTML의 샘플과 코드가 잘 작동 . url에서 가져온 HTML을 확인하고 그것이 "br"태그를 포함하고 있는지 확인하십시오. 이것이 귀하의 조건이거나이 조건을 제거하면 html을 얻을 수 있기 때문입니다.

import java.io.BufferedReader; 
    import java.io.InputStreamReader; 
    import java.net.URL; 
    import java.net.URLConnection; 

     public class Main { 
      public static void readData(String[] urls) { 
       for (int i=0; i<urls.length; i++) { 
        String str=""; 
        try { 
         URL url=new URL(urls[i]); 
         URLConnection conn=url.openConnection(); 
         BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
         String s; 
         while ((s = in.readLine())!=null) 
          if (s.contains("<br>")) { 
           str += s; 
          } 
        } catch(Exception e) { 
         e.printStackTrace(); 
        } 
        System.out.println("Url No. " + i +"\n\n"); 
        System.out.println(str +"\n"); 
       } 

      } 
      public static void main(String[] args) { 
       String[] urls = {"http://google.com","http://google.com"}; 
       readData(urls); 

      } 
     } 
관련 문제