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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
软件架构设计时容易忽略的几个重要问题
在软件开发中,我们对于软件架构经常看到极端,要么不重视软件架构,要么过分重视以至于她成了“天条”。我甚至遇到了这样的事情,某公司强制推行某基于Struts的架构设计,然而到了项目组它却处处遭到抵制,特别是分部基本上抛弃了这个架构设计。那么,这个原因在哪里呢?为什么一个成本高昂的架构设计没有被接纳呢?  实际上有时候一个良好的设计也未必会被接纳,特别是没有Java开发实际经验甚至缺乏软件开发经验
到底哪里出了问题?
#include "Neptune.h" #include "Platinum.h" #include #include #include #include #include /* definations of sa_family structre,htons,INADDR_ANY,... */ #include /* name ip format */ #include /*g
到底是哪里出了问题?
我想我犯了巨大的错误。我没有按照自己喜欢的方式生活,我没有按照自己喜欢的方式去细致研究生活——比如:吃喝住行,交友,学习方法………按照适合自己的方式,总结经验,找方法。这是我的错误,我这几年太绝望了。是我自己夸大其词了。学习,为了什么?至少要学会生活吧,要在有限的条件下快乐生活。 还忽略了一点,就是对人的研究。这是我在学校学习的过程中最大的错误——谋略是必须有的,不可能没有谋略,不可能只谈奋斗。
Java 字符串匹配和替换字符串
       在java里,在字符串中找字符很方便。        如下例子:      String fileContent=”this is a  flash call html this flash file=sdcard/initalFlash.swf”;     要在fileContent这个字符串中查找tempflash这个字符串就可以用如下的方法:    Pattern pattern = new Pattern.complie(“initialFlash”);  // 这个用来设置要
ACM中字符串题常用算法
转自http://blog.csdn.net/ck_boss/article/details/47066727 ACM中常用算法—-字符串 ACM中常用的字符串算法不多,主要有以下几种: Hash字典树KMPAC自动机manacher后缀数组EX_KMPSAM(后缀自动机)回文串自动机 下面来分别介绍一下: 0. Hash 字符串的hash是最简单也最常用的算法,通过某种has
JAVA面向对象问题的汇总
(一)父类引用指向子类对象    问:Father obj=new Son();  //obj可以访问Son中的方法吗? 答:对于这个问题你要明白两点:1、何为覆盖2、何为对象引用,何为对象实体(重点) Father obj=new Son(); Father obj  是对象引用 new Son(); 是对象实体 所以调用的方法可以说都是子类的方法,因为此代码中实体对象是子类
关于Java的线程问题总结
不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发、调试、优化经验,所以线程相关的问题在面试中经常会被提到。 在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程
字符串匹配度计算
/// /// 字符串相似度算法-编辑距离法 /// /// /// /// 返回的值越大相似度越高 public static double StringSimilarDegree_LD(string srcString, string matchString) {
一些学习中遇到的问题整理
附上自己学习过程中的思维导图:http://pan.baidu.com/s/1c2FS74W 1.数组打印        int []num = {1,2,3,4,5}; System.out.println(num.toString()); //输出:[I@15db9742 System.out.println(Arrays.toString(num)); //输出:[1,
利用动态规划解决-字符串的匹配问题
也可以找字符串的最大子序列,然后相减即可,但没有验证过。    int main () {      string s1,s2;     while( cin>>s1>>s2)     {         int len1 = s1.size();         int len2 = s2.size();         vector> dp(len1+1, vector(le