2011-09-15 39 views
0

我正在寫一個android應用程序,要求我檢索網頁的html代碼並獲取並返回特定的元素。 由於某些原因,代碼似乎掛起或花了很長時間來執行基本的字符串操作。字符串操作掛在android?

URL url = new URL(link); 
    URLConnection urlConnection = url.openConnection(); 
    InputStreamReader i = new InputStreamReader(
      urlConnection.getInputStream()); 
    BufferedReader in = new BufferedReader(i); 
    String check = ""; 
    String html = ""; 
    while((check = in.readLine()) != null) 
     html += check; 

只需要幾分鐘即可完成兩個模擬器,並與大學的連接速度的裝置。而

URL url = new URL(link); 
    URLConnection urlConnection = url.openConnection(); 
    InputStreamReader i = new InputStreamReader(
      urlConnection.getInputStream()); 
    BufferedReader in = new BufferedReader(i); 
    String check = ""; 
    String html = ""; 
    int p = 0; 
    while((check = in.readLine()) != null) 
     p++; 

需要約5秒鐘,並返回正確的行數在html頁面。 爲什麼字符串操作需要這麼長時間?爲了透視,該頁面長約4000行。

回答

2

因爲你做錯了。使用StringBuilder來構建較大的字符串。

StringBuilder sb = new StringBuilder(); 
while((check = in.readLine()) != null) 
    sb.append(check); 
html = sb.toString(); 

Why StringBuilder when there is String?

字符串不允許追加。您在String上調用的每個方法都將創建一個新對象並將其返回。這是因爲字符串是不可變的 - 它不能改變它的內部狀態。