1、任务简介
在上一节中对原版《西游记》进行文本处理后得到了一个不含空行的文本文档,在此基础上我需要在文本的每一个字符后分别添加斜杠/和空格,具体操作见下文。
2、基本任务和代码
(1)任务1
1)任务内容
在文本的每一个字符后添加斜杠/。
2)具体思路
(1)对于读取文档的方法以及InputStreamReader类、OutputStreamWriter类、BufferedReader类、BufferedWriter类等在上一节中已有讲解,具体如下:
使用InputStreamReader类对字符进行读取,然后使用BufferedReader类实现文本的逐行读出,从而实现对文档的读入;
使用OutputStreamWriter类可以将字符编码为字节流,然后使用BufferedWriter类将字符流写入文本文档中;
(2)本次任务依然要对文档逐行读出,并定义一个整形变量i,当i小于该行长度时就一直处于for循环中并自增,然后使用append()方法和charAt()将读取到的字符逐个写入新文档中,并在每一次循环中使用append()方法插入斜杠/;
3)任务代码
程序保存为plus1.java,具体代码如下:
import java.io.*;//导入java.io包中的所有类
import java.util.Scanner;//导入java.util包中的Scanner类
public class plus1 {//类名
public static void main(String[] args) {//程序主函数
try{//try代码块,当发生异常时会转到catch代码块中
Scanner s = new Scanner(System.in);//创建scanner,控制台会一直等待输入,直到敲回车结束
Scanner j = new Scanner(System.in);//创建scanner,控制台会一直等待输入,直到敲回车结束
System.out.println("请输入想要打开的文本文档:");//输入提示信息
String a = s.nextLine();//定义字符串变量,并赋值为用户输入的信息
System.out.println("请输入想要写入内容的文本文档:");//输入提示信息
String b = j.nextLine();//定义字符串变量,并赋值为用户输入的信息
File file=new File(b);//用命令行参数直接写入待写入文件
if(!file.exists()) {//if语句的条件,若指定路径下该文件不存在
file.createNewFile();//则在指定路径下新建该文件
}
//创建类进行文件的读取,并指定编码格式为utf-8
InputStreamReader read = new InputStreamReader(new FileInputStream(a),"utf-8");
BufferedReader in = new BufferedReader(read);//可用于读取指定文件
String str = null;//定义一个字符串类型变量str
int i = 0;//定义一个整型变量
//创建类进行文件的写入,并指定编码格式为utf-8
OutputStreamWriter outStream = new OutputStreamWriter(new FileOutputStream(file),"utf-8");
BufferedWriter bw = new BufferedWriter(outStream);//创建BufferedWiter类对象
while((str = in.readLine())!= null) {//readLine()方法, 用于读取一行,只要读取内容不为空就一直执行
for(i = 0;i < str.length();i++){//for循环的条件,当i小于该行长度时就一直循环并自增
bw.append(str.charAt(i));//在新文档中逐次插入每一个字符
bw.append("/");//在每一个字符后插入斜杠/
}
if(i == str.length()){//if语句的条件
bw.append("\r\n");//当i等于一行的最大长度时就进行换行操作
}
}
bw.close();//关闭流
in.close();//关闭流
System.out.println("所需内容已写入指定文档!");//输出提示信息
}catch(Exception e) {//当try代码块有异常时转到catch代码块
e.printStackTrace();//printStackTrace()方法是打印异常信息在程序中出错的位置及原因
}
}
}
4)运行结果
(1)所有路径均保存为D:\demo2,我使用的txt文档如下:
(2)在命令行对程序进行编译,然后对文档进行处理后保存,具体如下:
(3)打开路径下的xyj1.txt文件如下:
从图中可以看出,已经成功在每一个字符后添加了斜杠/;
(2)任务2
1)任务内容
在文本的每一个字符后添加空格。
2)具体思路
本任务与任务1不同之处仅仅在于只需要将while循环中的bw.append("/");改为bw.append(" ");即可;
3)任务代码
程序保存为plus2.java,具体代码如下:
import java.io.*;//导入java.io包中的所有类
import java.util.Scanner;//导入java.util包中的Scanner类
public class plus2 {//类名
public static void main(String[] args) {//程序主函数
try{//try代码块,当发生异常时会转到catch代码块中
Scanner s = new Scanner(System.in);//创建scanner,控制台会一直等待输入,直到敲回车结束
Scanner j = new Scanner(System.in);//创建scanner,控制台会一直等待输入,直到敲回车结束
System.out.println("请输入想要打开的文本文档:");//输入提示信息
String a = s.nextLine();//定义字符串变量,并赋值为用户输入的信息
System.out.println("请输入想要写入内容的文本文档:");//输入提示信息
String b = j.nextLine();//定义字符串变量,并赋值为用户输入的信息
File file=new File(b);//用命令行参数直接写入待写入文件
if(!file.exists()) {//if语句的条件,若指定路径下该文件不存在
file.createNewFile();//则在指定路径下新建该文件
}
//创建类进行文件的读取,并指定编码格式为utf-8
InputStreamReader read = new InputStreamReader(new FileInputStream(a),"utf-8");
BufferedReader in = new BufferedReader(read);//可用于读取指定文件
String str = null;//定义一个字符串类型变量str
int i = 0;//定义一个整型变量
//创建类进行文件的写入,并指定编码格式为utf-8
OutputStreamWriter outStream = new OutputStreamWriter(new FileOutputStream(file),"utf-8");
BufferedWriter bw = new BufferedWriter(outStream);//创建BufferedWiter类对象
while((str = in.readLine())!= null) {//readLine()方法, 用于读取一行,只要读取内容不为空就一直执行
for(i = 0;i < str.length();i++){//for循环的条件,当i小于该行长度时就一直循环并自增
bw.append(str.charAt(i));//在新文档中逐次插入每一个字符
bw.append(" ");//在每一个字符后插入空格
}
if(i == str.length()){//if语句的条件
bw.append("\r\n");//当i等于一行的最大长度时就进行换行操作
}
}
bw.close();//关闭流
in.close();//关闭流
System.out.println("所需内容已写入指定文档!");//输出提示信息
}catch(Exception e) {//当try代码块有异常时转到catch代码块
e.printStackTrace();//printStackTrace()方法是打印异常信息在程序中出错的位置及原因
}
}
}
4)运行结果
(1)所有路径均保存为D:\demo2,我使用的txt文档与任务1相同;
(2)在命令行对程序进行编译,然后对文档进行处理后保存,路径均为D:\demo2,具体如下:
(3)进入路径D:\demo2下打开xyj2.txt文件,显示如下:
从图中可以看出,已经成功在每一个字符后添加了空格;
3、总结
本次任务实现了在文本的每一个字符后面添加斜杠/和空格,如果想添加其他符号或内容只需要将bw.append("/");引号中的内容修改即可。这些任务是后面任务的基础,我会在不断学习的同时将后面的任务顺利完成。