java操作txt文本,二:删除文本括号内的内容

想法由来:之前写读书报告时,遇到一些烦人的文献,总喜欢把注释作为括号内容放到正文中,使文章繁琐冗长,所以写了下面这个代码,剔除了括号内的内容。

适用条件:原txt文本中的括号使用正确,即左右括号匹配正确,且对应的一对左右括号之间不能换行。

主要思想:以段落作为处理对象,找到第一个左括号的位置后,定义一个计数器count赋初值为1,然后遍历该左括号之后的字符,若遇到左括号则count加1,若遇到右括号则count减1。当count的值为0时,说明左右括号匹配正确,已经找到了与第一个左括号对应的右括号,此时就将这两个括号之间的内容以及括号替换成“”(空内容),然后再找寻该段落中的下一个左括号,并将count的值置为1,循环执行上述过程,将所有括号内内容删去。

源代码:

import java.io.*;
import java.util.*;

public class FileReader {

    public static String replace(String str) //识别括号并将括号内容替换的函数
    {
        int head = str.indexOf('('); //标记第一个使用左括号的位置
        if(head==-1); //如果str中不存在括号,什么也不做,直接跑到函数底端返回初值str
        else{
            int next=head+1; //从head+1起检查每个字符
            int count=1; //记录括号情况
            do{
                if(str.charAt(next)=='(')
                    count++;
                else if(str.charAt(next)==')')
                    count--;
                next++; //更新即将读取的下一个字符的位置
                if(count==0) //已经找到匹配的括号
                                {
                    String temp = str.substring(head,next); //将两括号之间的内容及括号提取到temp中
                    str = str.replace(temp, ""); //用空内容替换,复制给str
                    head = str.indexOf('('); //找寻下一个左括号
                    next=head+1; //标记下一个左括号后的字符位置
                    count=1; //count的值还原成1
                }
            }while(head!=-1); //如果在该段落中找不到左括号了,就终止循环
        }
        return str; //返回更新后的str
    }

        public static void main(String[] args) throws FileNotFoundException, Exception {

              Scanner in = new Scanner(new File("C:\\Users\\kid\\Desktop\\input.txt")); 
              //读取该地址下的input.txt文件
              PrintWriter out = new PrintWriter(new File("C:\\Users\\kid\\Desktop\\output.txt")); 
              //将处理后的文件output.txt创建到该地址下

        while(in.hasNext()){
            String str = in.nextLine(); 
                     //按行读取,遇到换行符停止。将读取到的内容赋值到str中
            str = str.replace('(', '('); 
            str = str.replace(')', ')'); 
                     //考虑到某些文献中输入法混用,统一将中文输入法下的括号--‘(’、‘)’替换成英文输入法下的括号--‘(’、‘)’,便于之后的处理
            out.write(replace(str)+"\r\n"); 
                    //写出文本并换行
        }
        out.close(); //关闭写入的文本
    }

}