我需要获取两个文本文件并按字母顺序将它们排序到一个新创建的文本文件中。
greekWriters.txt 包含:
伊索
欧里庇得斯
荷马
柏拉图
苏格拉底
romanWriters.txt 包含:
西塞罗
李维
奥维德
维吉尔
这是我的代码:
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
public class Driver {
public static void merge(String name1, String name2, String name3)
{
File file1 = null, file2 = null, file3 = null;
Scanner input1 = null, input2 = null;
PrintWriter output = null;
try {
file1 = new File(name1);
file2 = new File(name2);
file3 = new File(name3);
input1 = new Scanner(file1);
input2 = new Scanner(file2);
output = new PrintWriter(file3);
String s1 = input1.nextLine();
String s2 = input2.nextLine();
// Problem Area
while (input1.hasNext() && input2.hasNext())
{
if(s1.compareToIgnoreCase(s2) <= 0)
{
output.println(s1);
s1 = input1.nextLine();
}
else
{
output.println(s2);
s2 = input2.nextLine();
}
}
if (s1.compareToIgnoreCase(s2) <= 0)
{
output.println(s1 + "\n" + s2);
}
else
{
output.println(s2 + "\n" + s1);
}
while (input1.hasNext())
{
output.println(input1.nextLine());
}
while (input2.hasNext())
{
output.println(input2.nextLine());
}
}
// problem area end
catch (IOException e)
{
System.out.println("Error in merge()\n" + e.getMessage());
}
finally
{
if (input1 != null)
{
input1.close();
}
if (input2 != null)
{
input2.close();
}
if (output != null)
{
output.close();
}
System.out.println("Finally block completed.");
}
}
public static void main (String[] args)
{
Scanner input = new Scanner(System.in);
String name1, name2, name3;
name1 = "greekWriters.txt";
name2 = "romanWriters.txt";
System.out.print("Output File: ");
name3 = input.next();
merge(name1,name2,name3);
}
}
这是输出:
伊索
西塞罗
欧里庇得斯
荷马
李维
奥维德
柏拉图
维吉尔
苏格拉底
如您所见,它不是按顺序排列的(维吉尔和苏格拉底),我相信问题出在 while 循环上,当时循环正在读取 compareToIgnoreCase 方法中的文本文件的结尾。请帮我找出它没有正确排序的原因,我今晚想睡觉。提前感谢你们的帮助!