1
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
4

2 回答 2

7

它按字典顺序排序 - 字典上“11”在“2”之前,“Line No: 11”在“Line No: 2”之前。

如果你想要“更智能”的排序,你需要实现一个Comparer<String>执行适当的解析来比较字符串。

如果您的所有值实际上都是“行号:”后跟一个值,我只需将它们转换为一个数组或整数列表,因为这是您试图表示的自然int数据......并对一个值数组进行排序将按您的预期工作。

从根本上说,这就是将数字视为字符串的结果:)

于 2012-07-07T15:44:35.260 回答
2

正如乔恩所说,它按字典顺序对元素进行排序。您可以尝试使用所需的数字创建一个 int 数组,对其进行排序,然后将“行号:”连接到每个元素。我想解决方案策略首先取决于元素是如何失序的......

编辑:继承人的代码示例

    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];
    }
于 2012-07-07T15:47:50.410 回答