我有以下代码:我尝试做的是从for skill_list in df_skills["Skills"]:
if "skill1" in skill_list:
df_skills["skill1"] = 1
else:
df_skills["skill1"] = 0
print(df_skills)
df_skills = name Skill1
0 Joe 0
1 Sue 0
2 Chris 0
3 Sandy 0
4 Julia 0
读取几次(17.000次)。我基本上想要根据url.openConnection
给出的单词从网站中搜索和提取代码。然而,在创建ArrayList
大约40次后,它真的很慢。有更好的方法吗?
BufferedReader
答案 0 :(得分:1)
由于以上原因,上述代码正在经历O(N ^ 2)减速:
frase = frase + word;
每次执行时,它都会重新分配内存并将更长和更长的字符串复制到内存缓冲区中。
最好使用StringBuilder
:
StringBuilder sb = new StringBuilder();
for(int i=0;i<words.size();i++) {
key = (String)words.get(i);
url = new URL("http://www.tvs.com/x/" + key);
try ( InputStream is = url.openStream();
InputStreamReader in = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(in)) {
String word;
while( (word = reader.readLine()) != null) {
sb.append(word);
}
}
}
frase = sb.toString();
同时显示:尝试使用资源以确保始终正确关闭InputStream
,InputStreamReader
和BufferedReader
,即使出现例外情况。
答案 1 :(得分:1)
使用StringBuffer
的建议可能就是您想要的,但如果您使用的是Java 8,则可以使用BufferedReader.lines()
方法和收集器来连接所需的字符串:
URL url = new URL("http://www.tvs.com/x/" + key);
try (InputStream is = url.openStream();
InputStreamReader in = new InputStreamReader(is, StandardCharsets.UTF_8);
BufferedReader reader = new BufferedReader(in)) {
String phrase = reader.lines().collect(Collectors.joining(System.lineSeparator()));
}
答案 2 :(得分:0)
StringBuffer
或StringBuilder
。BufferedReader
无法读取数据的速度。您可能正在超载服务器。