public static void main(String[] args) {
String[] errorStr = new String[] {
"Line No: " + " " + 1,
"Line No: " + " " + 11,
"Line No: " + " " + 10,
"Line No: " + " " + 2,
"Line No: " + " " + 3
};
Arrays.sort(errorStr);
for(Object obj : errorStr){
System.out.println(obj);
}
}
有人能指出为什么排序不起作用吗?
expected is,
Line No: 1
Line No: 2
Line No: 3
Line No: 10
Line No: 11
Actual is,
Line No: 1
Line No: 11
Line No: 10
Line No: 2
Line No: 3
答案 0 :(得分:7)
按字典顺序排序 - 按字典顺序排列“11”出现在“2”之前,“行号:11”出现在“行号:2”之前。
如果你想要“更聪明”的排序,你需要实现一个Comparer<String>
来执行适当的解析,以便比较字符串。
如果您的所有值实际“行号:”后跟一个值,我只是将它们转换为数组或整数列表,因为它是自然您尝试表示的数据...并对int
值数组进行排序将按预期工作。
从根本上说,这就是将数字视为字符串的方法:)
答案 1 :(得分:2)
正如乔恩所说,它是按字典顺序对元素进行排序的。您可以尝试使用所需的数字创建一个int数组,对其进行排序,然后将“Line No:”连接到每个元素。我想解决方案策略的类型取决于元素首先如何失序......
编辑:继承代码示例
int[] errorInt = new int[]{ 1,11,10,2,3} ;
String[] errorString = new String[ errorInt.length ];
Arrays.sort(errorInt);
for( int i = 0; i < errorInt.length; i++) {
errorString[i] = "Error No:" + errorInt[i];
}