解析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编辑  收藏  举报

导航