2013-08-21 52 views
0

我怎樣才能從一個網站(網址:http://services.runescape.com/m=hiscore_oldschool/index_lite.ws?player=Hydro698)所有文本,並將其放入一個單一的線字符串,而不是多個行,目前它將有大約20行給出或採取,但我希望它是在一行中。從網站獲取文本並將其放入一行?

代碼程序來檢索文本:

public static void getTextFromURL() { 
    URL url; 
    InputStream is = null; 
    BufferedReader br; 
    String line; 

    try { 
     url = new URL("http://services.runescape.com/m=hiscore_oldschool/index_lite.ws?player=Hydro698"); 
     is = url.openStream(); // throws an IOException 
     br = new BufferedReader(new InputStreamReader(is)); 

     while ((line = br.readLine()) != null) { 
      System.out.println(line); 
     } 
    } catch (MalformedURLException mue) { 
     mue.printStackTrace(); 
    } catch (IOException ioe) { 
     ioe.printStackTrace(); 
    } finally { 
     try { 
      is.close(); 
     } catch (IOException ioe) { 
      // nothing to see here 
     } 
    } 
} 

編輯:你沒有給我所有的代碼,只是在正確的方向點。 :)

回答

1

簡單,將System.out.println更改爲System.out.print。完成。 :-D

若要返回String而不是,只需在循環外創建一個StringBuilder,然後將append的每行輸入給它。


示例代碼來說明後者(我只是意識到了OP想要的東西,這是空間,而不是換行):

StringBuilder result = new StringBuilder(); 
while ((line = br.readLine()) != null) { 
    if (result.length() != 0) 
     result.append(' '); 
    result.append(line); 
} 
return result.toString(); 

讀取每個字符了Hiren Patel的風格的作品太:

StringBuilder result = new StringBuilder(); 
while ((c = br.read()) != -1) 
    result.append(c == '\n' ? ' ' : (char) c); 
return result.toString(); 
+0

哇,我現在覺得愚蠢:)但不是意味着我的字符串將在那一行或只是'印刷'已被使用? –

+0

我不確定我是否理解你的問題。你只是想把行打印到屏幕上,還是你想要返回一個字符串?如果後者,如我的回答所提到的,只需創建一個'StringBuilder'並'追加'你從頁面讀取的每一行。 –

+0

@WillBaker在這裏,我添加了一些示例代碼來演示我的想法.... –

1

檢索輸出,而不是行按字符, 即從while ((line = br.readLine()) != null)使用while (int c != -1)讀取所有字符,並把它們在一個stringbuilder中。 然後在最後打印字符串。

編輯: 使用下面的代碼,它的工作原理:

public static void main(String args[]) { 
     URL url; 
     InputStream is = null; 
     try { 
      url = new URL("http://services.runescape.com/m=hiscore_oldschool/index_lite.ws?player=Hydro698"); 
      is = url.openStream(); // throws an IOException    
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      int ch = is.read(); 
      while (ch != -1) 
      { 
       if((char)ch != '\n')     
        baos.write(ch); 
       ch = is.read(); 
      } 
      byte[] data = baos.toByteArray(); 
      String st = new String(data); 
      System.out.println(st); 
     } catch (MalformedURLException mue) { 
      mue.printStackTrace(); 
     } catch (IOException ioe) { 
      ioe.printStackTrace(); 
     } finally { 
      try { 
       is.close(); 
      } catch (IOException ioe) { 
       // nothing to see here 
      } 
     } 
    } 

輸出是: 501844,110,34581332115,30,14114403982,1,18325274,31,15814460203,14,2405287276,11,1366419761,1,67679445,1,0505401,1,70522524,1,75454208,1,0505244,1,20505816,1,40469998,1,0337042,2,155393308,5,437403072,1,0488016,1,0524106,1,0428961,1,0389021,1,0382198,1,0383592,1,0362267,1,0-1,-1-1,-1-1,-1-1,-1-1,-1-1,-1-1,-1-1,-1-1,-1-1,-1-1,-1-1,-1-1,-1-1,-1-1,-1

希望當u運行,你也會明白,輸出爲單行。 String st = new String(data)拿着它。

+0

Nah,那也包括換行符。 OP想要刪除換行符。 –

+0

您知道,當您通過單個字符讀取輸出時,可以檢查讀字符是否爲'\ n',然後不添加到字符串生成器,否則添加到字符串生成器。這將確保您最後只有一個字符串,並且不會有'\ n'。或者你可以用''(空格)替換'\ n'。當你逐字閱讀而不是逐行閱讀時,你將擁有更多的權力。希望這會解決你的查詢。 –

+0

當然,但你應該在你的答案中說明。 :-) –

相關問題