我需要將兩個文本文件按字母順序排列到一個新創建的文本文件中。Java將兩個文本文件按字母順序排列到一個文本文件中
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);
}
}
這是輸出:
伊索
西塞羅
歐裏庇
荷馬
李維
Ovid的
柏拉圖
維吉爾
蘇格拉底
正如你可以看到它是不是爲了(維吉爾和蘇格拉底),我相信這個問題是當環路閱讀文本文件到底while循環compareToIgnoreCase方法。請幫我找出它沒有正確排序的原因,我今晚想睡覺。謝謝你們提前給予的幫助!
將輸入文件始終進行排序?他們可能是任何規模,或者他們會一直很小? – DNA
問題可能在於這條線,如果(s1.compareToIgnoreCase(s2)<= 0)只是通過查看它。我會運行一些測試。 – Dom
它們應該按任意大小排序,我只是爲了舉例的目的 – user2673161