2015-10-27 98 views
1

我試圖從url中獲取數據並將其轉儲到「content」實例變量中。應該在構造器中初始化urlcontenthasNextLine()nextLine()也參與其中,但對於Java來說是全新的,我無法理解這一點。這裏是代碼:使用java.util.Scanner從網站將數據從網站讀取到變量中

public class NewsFinder { 

// Instance variables 
private String url; 
private String content; 
private Scanner s; 

// Getter methods 
public String getUrl() { 
    return url; 
} 

public String getContent() { 
    return content; 
} 

// Constructor 
public NewsFinder(String url) { 
    this.url = url; 

    try { 
     Scanner s = new Scanner(new URL(url).openStream()); 
     if (s.hasNextLine()) { 
      this.s = s.nextLine(); 

     } 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

public boolean isInNews(Object o) { 
    if (((String) o).contains(content)) { 
     return true; 
    } else { 
     return false; 
    } 
} 

有什麼建議嗎?

Scanner s = new Scanner(new URL(url).openStream()); 
while (s.hasNextLine()) { 
    this.s += s.nextLine(); 
} 

Personnaly,我會用一個InputStreamBufferedReader來實現這一目標:

+0

不要將其命名構造函數's'的局部變量,這是你的'String'的名稱。另外,你在'content'還是's'中的內容? –

+0

閱讀['hasNextLine'](http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#hasNextLine())和['nextLine'](http:// docs .oracle.com/javase/7/docs/api/java/util/Scanner.html#nextLine())文檔。它將開始有意義:) – sam

+0

hasNextLine()應該在while循環中從流中讀取完整內容...您可以閱讀java docs http://docs.oracle.com/javase/7/docs/api/java/ util/Scanner.html – MIK

回答

1
Scanner s = new Scanner(new URL(url).openStream()); 
if (s.hasNextLine()) { 
    this.s = s.nextLine(); 
} 

從邏輯上講,這部分代碼應改爲。

URL url; InputStream is; BufferedReader br; String line; StringBuilder sb; 
try{ 
    url = new URL("http://stackoverflow.com"); 
    is = url.openStream(); 
    br = new BufferedReader(new InputStreamReader(is)); 
    sb = new StringBuilder(); 

    while ((line = br.readLine()) != null){ 
     sb.append(line); 
    } 
}catch(Exception e){ 
    e.printStackTrace(); 
}finally{ 
    try{ 
     if(is != null){ 
     is.close(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
}