zoukankan      html  css  js  c++  java
  • 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)+"
    "); 
                        //写出文本并换行
            }
            out.close(); //关闭写入的文本
        }
    
    }
    
    
  • 相关阅读:
    keepalived高可用+nginx证书代理
    dfs缩略图
    FastDFS分布式图片服务器搭建
    red5视频播放服务器
    压力测试操作流程
    mysql主从库配置读写分离以及备份
    jdk环境
    mysql主从库配置读写分离以及备份
    mysql5.7.26安装
    数据库异地备份(脚本)
  • 原文地址:https://www.cnblogs.com/ticktack/p/6366619.html
Copyright © 2011-2022 走看看