2012-07-07 3 views
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 

답변

7

이 사전 식 순서로 정렬 - 그리고 "2", 그리고 이전에 사 전적으로 "11"온다 "라인 번호 : (11)는" ": 2 호선"전에 온다.

"똑똑한"정렬을 원하면 문자열을 비교하기 위해 적절한 구문 분석을 수행하는 Comparer<String>을 구현해야합니다.

모든 값은 경우 실제로 "선 없음 :"그건 당신이 표현하려는 자연 데이터의 같은 값 다음에, 난 그냥, 배열 또는 정수의리스트로 변환 것입니다. .. 그리고 int 값 배열을 예상대로 정렬 할 수 있습니다.

기본적으로,이 존 그것은 전적으로 요소를 정렬하는 것, 말했듯이 당신이 문자열 :

+1

또는, 행 번호를 보유하고 특별한 클래스를 작성 적절한'int' 필드에'Comparable'을 구현하고 그것들을'String'으로 변환하기 전에 정렬합니다. –

+2

@ 루이스 워스 만 : 내 편집보기 - 정수 컬렉션으로의 간단한 변환이 내게 더 적합 할 것 같습니다. –

+1

참조 : [숫자가 포함될 수있는 문자열 정렬] (http://stackoverflow.com/ 질문/104599/sort-on-a-string-that-may-contain-a-number) –

2

로 숫자를 치료하기 위해 무엇을 얻을 수 있습니다. 원하는 수의 int 배열을 만들고 배열을 정렬 한 다음 각 요소에 "Line No :"를 연결하면됩니다. 나는 ... 솔루션 전략은 가지 요소가 처음에 순서가 있었는지에 따라 달라집니다

편집 같아요을 heres 코드 샘플

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]; 
    } 
+0

비슷한 문제가 발생했습니다. 편집 할 수있는 정말 빠르고 예를 들어 있습니까? –

관련 문제