2017-08-25 60 views
1

列表從輸入txt文件[爪哇]使用jar文件經由控制檯俄語名稱

  • Александр
  • Роман
  • Михаил不正確的輸出

此代碼正確的IntelliJ排序這些名稱調試期間的想法。 當我創建一個jar文件並從windows控制檯java -jar E:\\sort-it.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

也許你可以使用一個校書郎如下所示: https://stackoverflow.com/a/7633680/4636715 這樣你添加的語言環境的代碼明確,而不是依靠的IntelliJ的一個。 – vahdet

+0

但是,如果我需要手動編寫排序algorythm,我該如何改進我的代碼? – Fasta

回答

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已經說過的話。

沒有插入sneeky拉丁文相似的信件而不是西里爾文。

代碼看起來也不錯。

所以檢查字符集;我看不到的其他東西,就像它不可能。

+0

在FetchFileData方法中更改字符集可以幫助我。十分感謝! – Fasta