2013-05-28 3 views
2

자바에서 Java 프로그램을 작성하여 문자열을 사전 순으로 정렬했습니다. 그것은 문자로 취급 문자열 갖는 로마 숫자 정렬 따라 정렬 될 때 문제가자바에서 사용자 정의 문자열 정렬

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Comparator; 
public class SampleCustomSortApp 
{ 
    @SuppressWarnings("unchecked") 
    public static void main(String[] args) 
    { 
     ArrayList<String> titles =new ArrayList(); 
     titles.add("java"); 
     titles.add("J-IV"); 
     titles.add("A-V"); 
     titles.add("J-V"); 
     titles.add("J-IX"); 
     titles.add("J-XX"); 
     titles.add("J-X"); 
     titles.add("J-I"); 
     titles.add("J-II"); 

     titles.add("datawarehouse"); 
     titles.add("oracledba"); 
     System.out.println("Before Sorting Elements Are :"+titles+"\n"); 
     Collections.sort(titles, new MyCustomCompator()); 
     System.out.println("After Sorting Elements Are :"+titles); 
    } 
} 
class MyCustomCompator implements Comparator 
{ 
    public int compare(Object s1,Object s2) 
    { 
     String one = (String)s1; 
     String two = (String)s2; 
     /* for ascending order */ 
     if(one.compareTo(two)>0){ 
      return 1; 
     }else{ 
      return -1; 
     } 
    } 
} 

실제 출력

Before Sorting Elements Are :[java, J-IV, A-V, J-V, J-IX, J-XX, J-X, J-I, J-II, datawarehouse, oracledba] 

After Sorting Elements Are :[A-V, J-I, J-II, J-IV, J-IX, J-V, J-X, J-XX, datawarehouse, java, oracledba] 

원하는 출력

Before Sorting Elements Are :[java, J-IV, A-V, J-V, J-IX, J-XX, J-X, J-I, J-II, datawarehouse, oracledba] 

After Sorting Elements Are :[A-V, J-I, J-II, J-IV, J-V,J-IX, J-X, J-XX, datawarehouse, java, oracledba] 

제가 비교 정규식 표현을 사용해야 현. 어떤 사람들은 해결책을 말해 줄 수 있습니까

답변

4

정확하게 로마 숫자를 구문 분석하는 자신의 Comparator이 필요합니다. 구문 분석 작업은 (자연스럽게) 이미 해결되었으므로 문자열을 알파벳과 숫자로 분리하면됩니다. 로마 숫자 구문 분석 코드의 예는 here을 참조하십시오.

+0

슛, 나는 같은 링크로 너무 느리다 ... – Paul

+0

나는 초보자 마크 다, 나의 시나리오로 설명 할 수 있을까? –

1

문자열에서 로마 숫자를 추출 할 수 있으면 Comparator에서 로마 숫자 파서를 사용할 수 있습니다. 로마 숫자를 아라비아 숫자로 바꾸고 문자열을 비교하십시오. 아랍어 숫자에 0을 남겨 두어야합니다. 그래야 모두 숫자가 같습니다. 다음은 Java의 파서 예제입니다 (Rosetta Code).