解析HTML 文本 性能最高的方法
解析爬取后的html文件方法有很多。
有DOM方式,xpath方法解析,和最原始的字符串解析。
对比性能、简易性和内存消耗, 用原始的字符串解析是最佳的方式。
/**
* 将content中beginStr和endStr之间(包含beginStr和endStr)的数据分离处理放入List中 比如<br>
* String content ="xxxxaa1111bbaa2222bbcc55aa";<br>
* String beginStr ="aa";<br>
* String endStr ="bb";<br>
* List<String> strs = split(content,beginStr,endStr);
*
* strs的内容为["aa1111bb","aa2222bb"]
*
* @param content
* 原字符串
* @param beginStr
* 开始字符串
* @param endStr
* 结束字符串
* @return
*/
public static List<String> split(String content, String beginStr, String endStr) {
if (isEmpty(beginStr) || isEmpty(endStr)) {
throw new IllegalArgumentException(" beginStr or endStr is empty!");
}
if (content == null || content.length() == 0) {
return Collections.emptyList();
}
List<String> strs = new ArrayList<String>();
int pos = content.indexOf(beginStr);
int beginLen = beginStr.length();
while (pos != -1) {
int prepos = pos;
pos = content.indexOf(endStr, pos + beginLen);
if (pos != -1) {
strs.add(content.substring(prepos, pos));
} else {
break;
}
pos = content.indexOf(beginStr, pos);
}
return strs;
}
/**
* 取出str中beginStr和endStr之间的数据的第一对数据。
* 类似于Str.substring(str.indexOf(beginStr),str
* .indexOf(endStr));不过需要根据参数判断是否包含beginStr和endstr 如: String content
* ="xxxxaa1111bbaa2222bbcc55aa";<br>
* subString(content,"aa","bb",false,false) : "1111"<br>
* subString(content,"aa","bb",true,false) : "aa1111"]<br>
* subString(content,"aa","bb",false,true) : "1111bb"<br>
* subString(content,"aa","bb",true,true) : "aa1111bb"<br>
*
* @param str
* 原字符串
* @param beginStr
* 开始字符串
* @param endStr
* 结束字符串
* @param isIncluseBeginStr
* 是否包含开始字符串
* @param isIncludeEndStr
* 是否包含结束字符串
* @return
*/
public static String fistSubString(String str, String beginStr, String endStr, boolean isIncluseBeginStr,
boolean isIncludeEndStr) {
int index = str.indexOf(beginStr);
if (index != -1) {
int endIndex = str.indexOf(endStr, index + beginStr.length());
if (endIndex != -1) {
if (!isIncluseBeginStr) {
index += beginStr.length();
}
if (isIncludeEndStr) {
endIndex += endStr.length();
}
return str.substring(index, endIndex);
}
}
return null;
}
/**
* 判断str是否为空 return str == null || str.length() == 0;
*
* @param str
* @return
*/
public static boolean isEmpty(String str) {
return str == null || str.length() == 0;
}
posted on 2013-03-23 23:34 NanguoCoffee 阅读(912) 评论(0) 编辑 收藏 举报