我正在寻找建议和优化如何处理字符串替换(需要多次调用)并将这些对象添加到大型对象的arraylist(可包含1000多个字符串) /字符串。
我像这样处理这些字符串:
1.Replace function(多次调用)
2.正在提取步骤1的输出中的所有 href链接,并使用2个arraylists进行比较。
我的问题是有没有办法优化/更改这些功能,以便它们也适用于大字符串? 当我在包含 1000+ href链接的大字符串上使用这些函数时,arraylist(desti_Urls)未填充/为空。
然而,它们在普通/小弦乐上完美运行。
感谢您的建议和反馈。
编辑:最终目标是将最终的arraylist(desti_Urls)与 CustomTextView 中的网址进行比较,如果匹配则设置链接的文本颜色CTV为绿色。 PS:String(输出)设置为CustomTextView。
替换功能:
public static void processSubstring(String inPut) {
String temP;
if (inPut.contains("Download Instructions")){
temP = inPut.substring(inPut.indexOf("Download Instructions:")+31, inPut.length());
outPut = temP.replace("'", "\"").replace(":", ":").replace(".", ".").replace("</a>", "<br/>" + "</a>");
}
else {
temP = inPut.substring(inPut.indexOf("<a href="), inPut.length());
outPut = temP.replace("'", "\"").replace(":", ":").replace(".", ".").replace("</a>", "<br/>" + "</a>");
}
}
获取所有href网址链接并进行比较:
public static void parseAllLinks(String content) {
List<String> host_Urls = new ArrayList<>();
List<String> desti_Urls = new ArrayList<>();
List<String> totalUrls = new ArrayList<>();
desti_Urls.clear();
totalUrls.clear();
host_Urls.clear();
host_Urls.add("a.net");
host_Urls.add("b.com");
host_Urls.add("c.to");
host_Urls.add("d.com");
host_Urls.add("e.com");
host_Urls.add("f.to");
host_Urls.add("g.net");
host_Urls.add("h.to");
host_Urls.add("i.net");
host_Urls.add("j.it");
host_Urls.add("k.com");
host_Urls.add("l.com");
host_Urls.add("m.com");
host_Urls.add("n.com");
host_Urls.add("o.com");
host_Urls.add("p.com");
host_Urls.add("q.com");
host_Urls.add("r.net");
host_Urls.add("s.com");
host_Urls.add("t.com");
host_Urls.add("u.to");
host_Urls.add("v.com");
host_Urls.add("w.com");
host_Urls.add("x.net");
//Extract all url links from output string.
Document doc = Jsoup.parse(outPut);
Elements links = doc.select("a[href]");
for (Element link : links) {
totalUrls.add(link.attr("abs:href"));
}
//Compare them with the host arraylist and add valid
// host urls to new arraylist (desti_Urls).
for (int i = 0; i < host_Urls.size(); i++) {
for (int k = 0; k < totalUrls.size(); k++) {
if (totalUrls.get(k).contains(host_Urls.get(i))) {
desti_Urls.add(totalUrls.get(k));
}
}
}
// However on a LARGE String (output), desti_Urls is empty.
System.out.println("HOST LINKS AVAILABLE " + desti_Urls.toString());
}