2 qq 24351647 qq_24351647 于 2016.04.24 15:58 提问

java中关于字符串匹配的问题,哪里出了问题

/*
需求:当前有一张关键词表和一个新闻文本
要把在文本中所包含的词表中的关键词标识出来,(在这里我用的是前后加标识符)
然后输出到另一个文本
/
import java.io.
;

public class adverbSiged {
static File txtFile;// 将所有路径定义为全局变量
static File advFile;
static File targetFile;
static String beginSign = "#";
static String endSign = "**";

adverbSiged(File txtFile, File adverbFile, File targetFile)
        throws Exception {
    this.txtFile = txtFile;
    this.advFile = adverbFile;
    this.targetFile = targetFile;
    get();
}

public void get() throws Exception {
    FileInputStream fisTxt = new FileInputStream(txtFile);
    BufferedReader bufAdv = new BufferedReader(new FileReader(advFile));
    BufferedWriter bwTar = new BufferedWriter(new OutputStreamWriter(
            new FileOutputStream(targetFile), "utf-8"));

    // 将原文件读取至数组和txtStr中
    int txtLenth = fisTxt.available();
    byte[] txt = new byte[txtLenth];
    fisTxt.read(txt);
    String txtStr = new String(txt);

    // 将原字符串每个字符和词汇表每个词比较

    for (int i = 0; i < txtStr.length() - 1;) {
        String departStr = null;
        String line = null;
        boolean bool = false;//判断关键字表中是否有此关键字或词
        while ((line = bufAdv.readLine()) != null) {
            departStr = txtStr.substring(i, i + line.length());//读取与关键字等长的子串
            if (departStr.equals(line)) {
                bwTar.append(beginSign + line + endSign);
                bool = true;
                i = i + line.length();// 若找到此关键词,那么源字符串的角标向后移动此关键字的长度个位置

            }

        }
        if (bool == false) {// 如果在整个词表都没有匹配到,那么将这一个字符输出,角标向后移一位。
            bwTar.append(txtStr.subSequence(i, i + 1));
            i = i + 1;
        }
        bwTar.flush();
    }

    fisTxt.close();
    bufAdv.close();
    bwTar.close();
}

public static void main(String[] args) throws Exception {
    txtFile = new File("C:\\Users\\Administrator\\Desktop\\原文本.txt");
    advFile = new File("C:\\Users\\Administrator\\Desktop\\词表.txt");
    targetFile = new File("C:\\Users\\Administrator\\Desktop\\目标.txt");
    new adverbSiged(txtFile, advFile, targetFile);

}

}
//程序运行后原文本直接复制到了目标文本,没有任何改变,而且文本中确实包含关键词,帮看看哪里出错了,感谢

4个回答

CSDNXIAOD
CSDNXIAOD   2016.04.24 16:02

字符串匹配问题
字符串匹配问题
字符串匹配问题
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

qq_24351647
qq_24351647   2016.04.24 16:04

把departStr打印显示,除了第一次是一个字符串以外,后面的都是null

qq_24351647
qq_24351647   2016.04.25 09:35

大婶呢?在线等,挺急的~

oSanYeCao1234567
oSanYeCao1234567   Ds   Rxr 2016.09.15 19:22

额,可以使用分词索引工具 像Lucene

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!