【问题标题】:[Java]Incorrect output using jar file via console[Java]通过控制台使用 jar 文件输出不正确
【发布时间】:2018-02-03 14:58:36
【问题描述】:

输入 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);
  }
}

【问题讨论】:

  • 也许您可以使用如下所示的整理器:stackoverflow.com/a/7633680/4636715 这样您就可以显式地将语言环境添加到代码中,而不是依赖于 İntelliJ 的。
  • 但是如果我需要手动编写排序算法,我该如何改进我的代码?

标签: java sorting intellij-idea jar insertion-sort


【解决方案1】:

一个小问题是 FileReader 使用默认的平台编码。 在 IDE 和 Windows 中,这可能是控制台中的另一个。 最好这样做:

public static List<String> FetchFileData(String fileName) throws IOException {
    Charset charset = Charset.forName("Cp1251");
    return Files.readAllLines(Paths.get(fileName), charset);
}

指定文件的字符集可确保应用程序可移植到其他计算机(具有相同文件)。 Files 也提供写作支持。

确保每一行都修剪了空格,也许还有 Unicode BOM 字符 \uFEFF:

String line = lines.get(i);
line = line.trim().replace("\uFEFF", "");

compareTo 已经说过有更好的解决方案。

没有插入类似拉丁字母的狡猾的拉丁字母,而不是西里尔字母。

代码看起来也不错。

所以检查字符集;其他我看不到的东西,虽然不太可能。

【讨论】:

  • 在 FetchFileData 方法中更改字符集对我有帮助。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2010-10-12
  • 2016-02-15
  • 2016-06-05
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2011-12-02
相关资源
最近更新 更多