在 Android/Java 中,给定网站的 HTML 源代码,我想提取所有 XML 和 CSV 文件路径。
我正在做的(使用 RegEx)是这样的:
final HashSet<String> urls = new HashSet<String>();
final Pattern urlRegex = Pattern.compile(
"[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|].(xml|csv)");
final Matcher url = urlRegex.matcher(htmlString);
while (url.find()) {
urls.add(makeAbsoluteURL(url.group(0)));
}
public String makeAbsoluteURL(String url) {
if (url.startsWith("http://") || url.startsWith("http://")) {
return url;
}
else if (url.startsWith("/")) {
return mRootURL+url.substring(1);
}
else {
return mBaseURL+url;
}
}
不幸的是,对于一个正常长度的普通网站来说,这大约需要 25 秒。出了什么问题?我的正则表达式很糟糕吗?还是正则表达式太慢了?
如果没有 RegEx,我能否更快地找到 URL?
编辑:
有效字符的来源(大致)是这个答案。但是,我认为必须交换两个字符类(方括号),以便为 URL 的第一个字符设置更有限的字符集,为所有剩余字符设置更广泛的字符集。这是本意。