2011-09-15 6 views
0

私はWebページのhtmlコードを取得し、特定の要素を取得して返すことが必要なアンドロイドアプリを作成しています。 何らかの理由で、コードがハングしたり、基本的な文字列操作を実行するのに信じられないほど長い時間がかかるようです。文字列操作はアンドロイドでハングアップしますか?

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++; 

は、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で呼び出す各メソッドは、新しいオブジェクトを作成し、それを返します。これはStringが不変であるためです。内部状態を変更することはできません。