想法由来:之前写读书报告时,遇到一些烦人的文献,总喜欢把注释作为括号内容放到正文中,使文章繁琐冗长,所以写了下面这个代码,剔除了括号内的内容。
适用条件:原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(); //关闭写入的文本
} }
java操作txt文本(二):删除文本括号内的内容的更多相关文章
-
【MathType教学】如何让括号内的内容居中
作为一款非常好用的公式编辑器,MathType它的功能十分强大,不仅包含了大量的数学符号,并且能和Office软件很好地兼容.但是有的时候打出来的公式可能不是自己想要的效果,这时我们就要用一些特别的办 ...
-
python 操作txt 生成新的文本数据
name: Jack ; salary: 12000 name :Mike ; salary: 12300 name: Luk ; salary: 10030 name :Tim ; salary: ...
-
java操作elasticsearch实现查询删除和查询所有
后期博客本人都只给出代码,具体的说明在代码中也有注释. 1.查询删除 //查询删除:将查询到的数据进行删除 @Test public void test8() throws UnknownHostEx ...
-
Java操作redis【二十】
1.首先需要将redis的绑定地址为127.0.0.1去掉,同时将redis的保护模式去掉,并且开放6379端口. 如果是保护模式需要输入密码才能连接. (1)去掉绑定地址: (2)去掉保护模式: ( ...
-
java读取txt文件的2中方法---并将内容(每一行以固定的字符分割切成2段)存到map中去
#java读取txt文件的第一种方法 /** * 方法:readTxt * 功能:读取txt文件并把txt文件的内容---每一行作为一个字符串加入到List中去 * 参数:txt文件的地址 * 返回: ...
-
java操作txt文本(一):遇到指定字符换行
想法由来:有时查看网页源代码的css文件内容,竟是恼人的压缩后代码(不换行),如下图所示-- 它的可读性很差,所以写了下面这个简单的程序,实现自动换行. 适用条件:遇到指定字符换行(本例中遇到'}'换 ...
-
使用Java操作Redis(二)
上篇文章中我们可以看到,通过自己动手编码来操作Redis是相当繁琐的,实际上我们在重复制造*.Redis网站上列举出了一些方便操作Redis的常用工具. 可供Java选择的比较多,这里介绍一下Jed ...
-
Python文件操作大全,随机删除文件夹内的任意文件
在读文件的时候往往需要遍历文件夹,python的os.path包含了很多文件.文件夹操作的方法: os.path.abspath(path) #返回绝对路径os.path.basename(path ...
-
java操作elasticsearch实现批量添加数据(bulk)
java操作elasticsearch实现批量添加主要使用了bulk 代码如下: //bulk批量操作(批量添加) @Test public void test7() throws IOExcepti ...
随机推荐
-
YII2学习第一天
YII2学习第一天,之前稍微看了看TP,感觉和自己的理念不是很符合,然后转学YII2了. 使用的文档是https://github.com/yiisoft/yii2/tree/master/docs/ ...
-
Linux基础教程之/dev/null和/dev/zero的区别及其用法
在Linux操作系统中/dev/null和/dev/zero是两个相似却又很特殊的文件,特别是在shell脚本开发和系统运维过程中会经常用这两个文件,因此作为Linux系统工程师,必须了解这两个文件的 ...
-
改变DEV控件的字体 z
改变所有的组件字体,使用AppearanceObject.DefaultFont属性:static void Main() { DevExpress.Utils.AppearanceObject ...
-
javascript的选项卡
主要用的索引值 首先 写三个按钮 <input type="button" > <input type="button" > <i ...
-
ext3文件系统,reiserfs,xfs,jsf那种性能好点
ext2 是一个旧的 Linux 档桉系统,没有日志功能. 启用的时间通常需要很久.目前有许多 日志型态 的档桉系统可以以更快的速度及更好的效率完成系统启用和检查. ext3 为 ext2 的日志版, ...
-
第三百八十九节,Django+Xadmin打造上线标准的在线教育平台—列表筛选结合分页
第三百八十九节,Django+Xadmin打造上线标准的在线教育平台—列表筛选结合分页 根据用户的筛选条件来结合分页 实现原理就是,当用户点击一个筛选条件时,通过get请求方式传参将筛选的id或者值, ...
-
Cocoa 集合类型:NSPointerArray,NSMapTable,NSHashTable
iOS 中有很多种集合类型,最为常见的可能就 NSArray.NSDictionary.NSSet,但其实还有 NSPointerArray.NSMapTable.NSHashTable 等类型,虽然 ...
-
RN中关于ListView的使用
1. ListView dataSource 介绍: ListView需要指定数据的来源.传入数据必须是数组,或者是字典里面嵌套数组 系统会根据你传入的数据自动生成section和row 每一个字典的 ...
- Java 中断线程
-
001Spring 定时任务 Scheduled
01.@Scheduled注解参数 @Scheduled支持fixedRate.fixedDelay.cron表达式参数.其中,fixedRate和fixedDelay没有区别,都是启动时执行1次,每 ...