我正在编写一个Android应用程序,要求我检索网页的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++;
需要约5秒钟,并在html页面中返回正确的行数。 为什么字符串操作需要这么长时间?仅仅是为了透视,页面大约有4000行。
答案 0 :(得分: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是不可变的 - 它不能改变它的内部状态。