gpt4 book ai didi

java - Collections.sort() 未按正确的顺序排序

转载 作者:行者123 更新时间:2023-12-01 07:05:57 26 4
gpt4 key购买 nike

我有这样的 Java 代码:

List<String> unSorted = new ArrayList<String>();
List<String> beforeHash = new ArrayList<String>();
String[] unSortedAux, beforeHashAux;
String line = null;

BufferedReader reader = new BufferedReader(new FileReader("C:\\CPD\\temp0.txt"));
while ((line = reader.readLine()) != null){
unSorted.add(line);
beforeHash.add(line.split("#")[0]);

}
reader.close();

Collections.sort(beforeHash);
beforeHashAux = beforeHash.toArray(new String[beforeHash.size()]);
unSortedAux = unSorted.toArray(new String[unSorted.size()]);

System.out.println(Arrays.toString(beforeHashAux));
System.out.println(Arrays.toString(unSortedAux));

它读取一个名为 temp0.txt 的文件,其中包含:

Carlos Magno#261
Mateus Carl#12
Analise Soares#151
Giancarlo Tobias#150

我的目标是对字符串中的名称进行排序,“#”后面没有字符串。我正在使用 beforeHash.add(line.split("#")[0]);去做这个。问题是它正确读取文件,但排序顺序错误。相应的输出是:

[Analise Soares, Giancarlo Tobias, Mateus Carl, Carlos Magno]
[Carlos Magno#261, Mateus Carl#12, Analise Soares#151, Giancarlo Tobias#150]

第一个结果是“排序”结果,请注意“Carlos Magno”位于“Mateus Carl”之后。我在代码中找不到问题。

最佳答案

问题是“Carlos Magno”以 Unicode byte-order mark 开头。

如果您将示例文本 ([Analise ... Carlos Magno]) 复制并粘贴到 Unicode Explorer 中,您会看到在 Carlos Magno 的“C”之前,您得到了U+FEFF。

基本上,您在读取文件时需要删除它。最简单的方法就是使用:

line = line.replace("\ufeff", "");

...或先检查:

if (line.startsWith("\ufeff")) {
line = line.substring(1);
}

请注意,您应该真正指定打开文件时要使用的编码 - 使用包装在 InputStreamReader 中的 FileInputStream

关于java - Collections.sort() 未按正确的顺序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24373256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com