在Android/Java数组中从字符串中清除HTML并返回结果的最快方法
我正在使用JSOUP解析一个包含900个条目的for循环中的html字符串,但是,当尝试读取html的部分时,异步任务需要大约40秒才能完成。。。string.replace会将时间缩短到8到10秒 像这样的JSOUP非常快:在Android/Java数组中从字符串中清除HTML并返回结果的最快方法,java,android,arrays,regex,replace,Java,Android,Arrays,Regex,Replace,我正在使用JSOUP解析一个包含900个条目的for循环中的html字符串,但是,当尝试读取html的部分时,异步任务需要大约40秒才能完成。。。string.replace会将时间缩短到8到10秒 像这样的JSOUP非常快: element.text(); JSOUP like so速度很慢: element.html(); 我可以在任何东西上使用JSOUP文本,但第二个href除外,我需要下面字符串中948中的一个数字。所以我需要在…上使用.html和.replace 我有一个字符串,看
element.text();
JSOUP like so速度很慢:
element.html();
我可以在任何东西上使用JSOUP文本,但第二个href除外,我需要下面字符串中948中的一个数字。所以我需要在…上使用.html和.replace
我有一个字符串,看起来是相同的结构,每次都有不同的数据:
String siteDescription = "<b><font size='+2'>46Q01S: Mt. Ryan</font></b><hr></hr><table cellspacing='0' cellpadding='0' width='400'>" +
"<tr><td>Elev: 2800 feet</td></tr><tr><td>Snow Water Equivalent: 2.4 inches</td><td>Snow Water Equivalent: 92 pct norm</td></tr>" +
"<tr><td>Water Year Precipitation: 2 inches</td><td>Water Year Precipitation: 66 pct norm</td></tr>" +
"<tr><td>Snow Depth: 14 inches</td><td>Snow Density: 17 percent</td></tr>" +
"<tr><td><a href='http://www.wcc.nrcs.usda.gov/cgibin/wygraph-multi.pl?state=AK&wateryear=current&stationidname=46Q01S'>Time Series Chart</a></td>" +
"<td><a href='http://www.wcc.nrcs.usda.gov/nwcc/site?sitenum=948'>Site Info</a></td></tr></table>" +
"<a href='http://www.wcc.nrcs.usda.gov/siteimages/948.jpg'><img width='400' alt='img not available' src='http://www.wcc.nrcs.usda.gov/siteimages/948.jpg'/></a><hr></hr>" +
"Generated: 26 Dec 2014";
我正在努力完善我的代码,并找出我是否真的需要做这么多?最后,我将它添加到一个数组中,以便轻松使用本描述中的片段。我在每个标签和2个标签后面添加了一个逗号,以便从字符串数组中轻松读取。以下是我的建议:
String descrip = siteDescription.replace(
"<table cellspacing=\"0\" cellpadding=\"0\" width=\"400\">", "");
String descri = descrip.replace("<td>", "");
String descr = descri.replace("</td>", ",");
String desc = descr.replace("</table>", "");
String des = desc.replace("<tr>", "");
String de = des.replace("</tr>", "");
String d = de.replace("<hr></hr>", ",");
String Name;
String Elevation;
String SWEinches;
String SWEPercentNormal;
String WYPinches;
String WYPPercentNormal;
String SnowDepth;
String SnowDensity;
String SiteImage;
String siteNumber;
String[] splitData = d.split(",");
for (int j = 0; j < splitData.length; j++) {
splitData[j].replaceAll("\\W", "");
}
if (splitData[0] != null) {
Name = splitData[0];
} else {
Name = "N/A";
}
if (splitData[1] != null) {
Elevation = splitData[1];
} else {
Elevation = "N/A";
}
if (splitData[2] != null) {
SWEinches = splitData[2];
} else {
SWEinches = "N/A";
}
if (splitData[3] != null) {
SWEPercentNormal = splitData[3];
} else {
SWEPercentNormal = "N/A";
}
if (splitData[4] != null) {
WYPinches = splitData[4];
} else {
WYPinches = "N/A";
}
if (splitData[5] != null) {
WYPPercentNormal = splitData[5];
} else {
WYPPercentNormal = "N/A";
}
if (splitData[6] != null) {
SnowDepth = splitData[6];
} else {
SnowDepth = "N/A";
}
if (splitData[7] != null) {
SnowDensity = splitData[7];
} else {
SnowDensity = "N/A";
}
if (splitData[8] != null) {
SiteImage = splitData[8];
} else {
SiteImage = "N/A";
}
if (splitData[9] != null) {
siteNumber = splitData[9].replaceAll("\\D", "");
} else {
siteNumber = "000000";
}
我需要的数据在表中。有没有更简单的方法?更快的方式?更好的方法?!我创造了一个新的世界
编辑:::在提交本文后,我有一个想法,使用JSOUP并像这样选择单个图像元素会更快:
Document doc = Jsoup.parse(siteDescription);
//THIS WORKS FAST ENOUGH...
Elements tds = doc.getElementsByTag("td");
for (int i = 0; i < tds.size(); i++) {
//Log.e("TD", i + " : " + tds.get(5).text());
siteSnowDepth = tds.get(5).text();
}
//THIS ACTUALLY DOES TOO!
Elements imgs = doc.select("img");
for (int i = 0; i < imgs.size(); i++) {
Log.v("LINK", imgs.attr("src").replaceAll("\\D", ""));
}
尝试使用正则表达式(例如desc.replace)减少replace调用;要同时匹配tr open和close标记,请执行以下操作:String descripp=sitescription.replaceAll |,;字符串d=descripp.replaceAll |;