日期:2014-05-20  浏览次数:20783 次

Java截取网页源代码的问题
========网页源码如下=========
..........
..........
<div class="neirong">
《疯狂android讲义》
<br />
第1章  android应用与开发环境1
<br />
1.1  android的发展和历史2
<br />
1.1.1  android的发展和简介2
<br />
1.1.2  android平台架构及特性3
<br />
..........
..........
<div class="read-more">

========================
要求:
1.以 class="neirong" 作为标识,真正截取的是从第1章开始,到<div class="read-more">结束。
2.去除<br />等杂项,最后希望呈现的String为:
================================
第1章  android应用与开发环境    1

1.1  android的发展和历史    2

1.1.1  android的发展和简介    2

================================
这种干净的格式
3.页码与前面的文字之间必须是TAB(制表符)!这点很重要!!
求高手指点思路,或提供源码,小弟感激不尽!!

------解决方案--------------------
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class dsfg {
public static void main(String[] args){
String s="<div class=\"neirong\">"
+"《疯狂android讲义》"+
"<br />"+
"第1章  android应用与开发环境1"+
"<br />"+
"1.1  android的发展和历史2"+
"<br />"+
"1.1.1  android的发展和简介2"+
"<br />"+
"1.1.2  android平台架构及特性3"+
"<br />"+
"...................."+
"<div class=\"read-more\">";

Pattern p=Pattern.compile("<div class=\"neirong\">(.*)<div class=\"read-more\">");
Matcher m=p.matcher(s);
while(m.find()){

String[] a=m.group(1).split("<br />");
for(int i=2;i<a.length;i++){
Pattern pa=Pattern.compile("(.*)(\\d)");
Matcher ma=pa.matcher(a[i]);

while(ma.find()){

System.out.printf("%s\t%d\n",ma.group(1),Integer.parseInt((ma.group(2))));
}
}


}
}
}

------解决方案--------------------
头和尾的===========没加
写成了一个工具类

String html="ss<p>kk</p>ss";
public static List<String> getContext2(String html) {

List<String> resultList = new ArrayList<String>();
        Pattern p = Pattern.compile("第一章(.*?)<div class=\"read-more\">");//匹配<p>开头,</p>结尾的文档
        Matcher m = p.matcher(html );//开始编译
        while (m.find()) {
         String str=m.group(1);
         str=str.replaceAll("<br />", "");
            resultList.add(m.group(1));//获取被匹配的部分
        }
        return resultList;
    }