独自のComparator
クラス/オブジェクトを作成して に渡すことができますArrays.sort()
。残念ながら、要素を に変換する必要もありますCharacter
。
ただし、おそらく最も一般的な方法は、次の例のように、各文字を として見て、String
を使用することです。Collator
// Rules separated in 3 parts only for convenience
String rules1= "< A < B < C < D < E < F < G < H < I < J < K < L < M < N < O < P < Q < R < S < T < U < V < W < X < Y < Z" ;
String rules2= "< a < b < c < d < e < f < g < h < i < j < k < l < m < n < o < p < q < r < s < t < u < v < w < x < y < z" ;
String rules3= "< 0 < 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9" ;
RuleBasedCollator collator= new RuleBasedCollator(rules1+rules2+rules3) ;
String input= "h498y948759hrh98A722hjDF94yugerTEr892ur48y" ;
// Bulk of the job done here
String[] arr= input.split("") ;
Arrays.sort(arr,1,arr.length,collator);
// Join back in a single string for presentation
StringBuilder sb= new StringBuilder() ;
for(String e: arr )
sb.append( e );
System.out.println(sb);
出力は
ADEFTeghhhhjrrrruuyyy222444457788888999999
照合規則のみを
String rules1= "< 0 < 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9" ;
String rules2= "< A,a < B,b < C,c < D,d < E,e < F,f < G,g < H,h < I,i < J,j < K,k < L,l < M,m < N,n < O,o < P,p < Q,q < R,r < S,s < T,t < U,u < V,v < W,w < X,x < Y,y < Z,z" ;
RuleBasedCollator collator= new RuleBasedCollator(rules1+rules2) ;
出力は
222444457788888999999ADEeFghhhhjrrrrTuuyyy
sの主な利点は、Collator
複数文字の文字列を内部規則に従ってソートできることです。実際、これが彼らの主な使用例です。
かなり強力ですね。(はい、ご想像のとおり、私はカナダ人です :-) )