问题需求:
打开第 11 章中讲到的 IOStreamDemo.java 文件,一次读取其中的一行,令每行形成一个 String 对象。然后利用 java.util.Comparator 接口重新定义 String 对象间的比较方法:将每个 String 中的小写字母转为大写后再进行比较。使用该比较法对这些 String 进行排序,按从大到小的顺序存入一个 LinkedList。最后将LinkedList 中的 String 按存入的相反顺序输出到另一个文件 inverse.txt 中。
项目结构:
源码地址:
https://github.com/HuangFuGui/Java/tree/master/javaExperiment2.5
总体分析:
StrArrayComparator类实现Comparator(泛型为String)接口并重写compare方法以为Arrays.sort()定义比较器。fileReader类中先读入IOStreamDemo.java文件,一次读一行,并将每行内容存入字符串数组中。通过File类新建文件名为“inverse.txt”的文件,配合BufferedWriter类将内容写入,最后关闭BufferedWriter。
StrArrayComparator.java(定义从大到小的比较器):
package solvePackage;
import java.util.Comparator;
public class StrArrayComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2){
//按题目要求将字符串全部转换为大写再比较
o1 = o1.toUpperCase();
o2 = o2.toUpperCase();
return o2.compareTo(o1);
}
}
fileReader.java(先读入再写出):
package solvePackage;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;
public class fileReader {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(
new FileReader("IOStreamDemo.java"));
String s;
String[] array = new String[200];
int i = 0;
while((s = in.readLine()) != null){//readLine()方法每次读取文件的一行直到遇到换行符
array[i++] = s + "\n"; //读取文件的每一行存入字符串数组
}
in.close();
Arrays.sort(array, 0, i, new StrArrayComparator()); //从大到小排序
//new StrArrayComparator()为比较器,引用为:Comparator<String>
LinkedList<String> lList = new LinkedList<String>();
int cnt = 0;
for(String str : array){
if(cnt == i)
break;
lList.add(str); //从大到小的顺序存入LinkedList
cnt++;
}
File file = new File("inverse.txt");
if(!file.exists()){
file.createNewFile();
}
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("inverse.txt")));
for(int j = lList.size() - 1; j >= 0; --j){
bw.write(lList.get(j)); //按存入的反向顺序存入inverse.txt
}
bw.close();
}
}
运行结果:
生成inverse.txt文件,并将内容全部写入。