新手求助,带有正则表达式的代码运行到没有反应了

zxczxcvvvvv 2012-10-22 07:52:26
我想实现能从网页源码中抽出完整的汉字句子来存放在本地,然后用lucene来建立索引,但是一直没有想出来能够匹配完整汉字句子的正则表达式,我试着写了一个,但是运行到一半就没反应了,希望有人能帮我解答一下,另外还想求一个能匹配完整汉字句子包括标点符号什么的,或者有没有别的实现方法。代码和我实验的网页源码写在下面:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.Exception;
import java.util.regex.*;
public class pattern {
public static void main(String[] args) {
File f111 = new File("F:/JAVA代码存储/文件提取汉字/111.txt");
File f222 = new File("F:/JAVA代码存储/文件提取汉字/222.txt");
try{
BufferedReader reader=new BufferedReader(new FileReader(f111)); //缓冲流
StringBuilder sb=new StringBuilder(); //将所有源码按格式读入sb中
StringBuilder sb2=new StringBuilder(); //将所有匹配出的源码按格式写入sb2中
BufferedWriter bw=new BufferedWriter(new FileWriter(f222)); //缓冲流
String str,str2; //负责读每一行源码
while((str=reader.readLine())!=null)
{
str=str+"\n";
sb.append(str);
}
String reg = "[\u4e00-\u9fa5](.|[\u4e00-\u9fa5])*。";

Pattern pat = Pattern.compile(reg);
System.out.println(0);
Matcher mat = pat.matcher(sb.toString());
System.out.println(mat.find());
if(mat.find()==false)
{System.out.println("没有匹配到");}
if(mat.find()==true)
{System.out.println("匹配到");}
System.out.println(1);
while(mat.find())
{
str2 = mat.group();

if(str2.length()<1)
continue;
System.out.println(str2);
str2 = str2+"\n";
sb2.append(str2);
}
System.out.println(2);
String sbb;
sbb = sb2.toString();
bw.write(sbb);
reader.close();
bw.close();
}
catch(FileNotFoundException e1){}catch(IOException e2){}
catch(PatternSyntaxException e3){System.out.println("语法错误");}
System.out.println("完成");
}
}

实验网页的源码:
http://view-source:http://war.163.com/12/1018/09/8E3BGLR700011232.html
我希望最后能只保存:
据台湾《联合报》报道…………刚好互补。
...全文
123 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
cstur4 2012-10-23
  • 打赏
  • 举报
回复
[\u4e00-\u9fa5这里再加上乱七八糟的标点 ]+
wapigzhu 2012-10-22
  • 打赏
  • 举报
回复
看不到你那个网站,我把163打开看了下,估计你是只想要标签中的字
因为如果你指提取中文和符号,像“林汉丑说,渔船雇用外籍佣兵,半年一期,一人折合新台币约54万元”
这句,就会变成"林汉丑说,渔船雇用外籍佣兵,半年一期,一人折合新台币约","万元"两个句子
你想要整段话的话,可以直接sb.toString().replaceAll("<[^>]+>|\n","");

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧