排序数组不起作用

时间:2012-07-07 15:43:19

标签: java arrays sorting

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

2 个答案:

答案 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];
    }