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」の前にあり、「行番号:11」は「行番号:2」の前にあります。

「よりスマートな」並べ替えが必要な場合は、Comparer<String>文字列を比較するために適切な解析を実行するを実装する必要があります。

すべての値が実際に「行番号:」の後に値が続く場合は、それらを配列または整数のリストに変換します。これは、表現しようとしている自然なintデータであるためです...そして値の配列を並べ替えます期待どおりに機能します。

基本的に、これは数値を文字列として扱うために得られるものです:)

于 2012-07-07T15:44:35.260 に答える
2

Jonが言ったように、それは要素を辞書式にソートしています。目的の数値を使用して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 に答える