来自输入txt文件的俄语名称列表
此代码在调试期间在IntelliJ Idea中正确排序这些名称。
当我创建一个jar文件并从Windows控制台java -jar E:\\sort-it.jar
运行它时,然后在输出文件中,第一个名称是Роман,尽管它应该是Александр,就像调试一样。
jar启动的错误顺序是
正确的顺序是
可能是什么问题?
package programs;
import java.io.*;
import java.util.*;
public class Main{
public static String inputFileName = "E:/in.txt";
public static String outputFileName = "E:/out.txt";
public static List<String> FetchFileData(String fileName) throws IOException {
List<String> tempArray = new ArrayList();
BufferedReader reader = new BufferedReader(new FileReader(fileName));
String line;
while ((line = reader.readLine()) != null){
tempArray.add(line);
}
reader.close();
return tempArray;
}
public static List<String> SortWords(List<String> inputArray) {
String temp;
for (int i = 0; i < inputArray.size(); i++){
for (int j = i + 1; j < inputArray.size(); j++){
if (inputArray.get(i).compareTo(inputArray.get(j)) > 0){
temp = inputArray.get(i);
inputArray.set(i, inputArray.get(j));
inputArray.set(j, temp);
}
}
}
return inputArray;
}
public static void WriteToFile(List<String> inputArray, String fileName) throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
for (int i = 0; i < inputArray.size(); i++) {
writer.write(inputArray.get(i));
writer.newLine();
}
writer.close();
}
public static void main(String[] args) throws IOException {
List<String> unsortedArray;
List<String> sortedArray;
unsortedArray = FetchFileData(inputFileName);
sortedArray = SortWords(unsortedArray);
WriteToFile(sortedArray, outputFileName);
}
}
答案 0 :(得分:1)
一个小问题是FileReader使用默认的平台编码。 在IDE&amp; Windows可能是控制台中的另一个。 更好:
public static List<String> FetchFileData(String fileName) throws IOException {
Charset charset = Charset.forName("Cp1251");
return Files.readAllLines(Paths.get(fileName), charset);
}
指定文件的charset可确保应用程序可移植到其他计算机(具有相同的文件)。 Files
也为写作提供支持。
确保每一行都修剪了空格,并且可能是Unicode BOM字符\uFEFF
:
String line = lines.get(i);
line = line.trim().replace("\uFEFF", "");
有更好的解决方案compareTo
已经说过了。
没有插入令人毛骨悚然的拉丁语相似的字母,而不是西里尔字母。
代码也很好。
所以检查一下charset;我没看到的其他东西,尽管不太可能。