开发者社区> 问答> 正文

关于 java String字符串截取问题

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


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


 adverbSignd(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();
 //System.out.println(departStr);
 }


 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 adverbSignd(txtFile, advFile, targetFile);


 }
 }

//结果原文本原样输出到目标文本,

展开
收起
爵霸 2016-03-23 14:33:00 2612 0
1 条回答
写回答
取消 提交回答
  • 大致看了下你的实现思路,

    1.实现

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

    这个功能的时候,是不是可以选择使用 正则表达式呢,我看你用的是循环实现。

    2.你问的这个问题,通过简单的打断点调试便可以指导错误出现在哪里啊

    2019-07-17 19:11:01
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载