2013-12-07 28 views
5

2つの文字列を比較し、アルファベット順にソートしたいと思っています。私は現在、文字列を持つ2つの配列を作成し、2つの配列を比較するものをソートしています。2つの文字列を比較し、アルファベット順にソートする

String a="LetterA"; 
String b="ALetterB"; 
String[] array1={a.toLowerCase(),b.toLowerCase()}; 
String[] array2={a.toLowerCase(),b.toLowerCase()}; 
Arrays.sort(array2); 
if (Arrays.equals(array1, array2)){ 
    System.out.println(a+" is before "+b); 
} 
else{ 
    System.out.println(b+" is before "+a); 
} 

これは機能しますが、時間とメモリを消費します。誰かがこれを行うより良い方法を提案できるかどうか、私は感謝します。

+1

の目標は何ですか?あなたはもっと詳しく説明できますか? –

答えて

15

ヒント:すべての基本データ型クラスjava実装Comparable interface

String a="LetterA"; 
String b="ALetterB"; 
int compare = a.compareTo(b); 
if (compare < 0){ 
    System.out.println(a+" is before "+b); 
} 
else if (compare > 0) { 
    System.out.println(b+" is before "+a); 
} 
else { 
    System.out.println(b+" is same as "+a); 
} 
+2

あなたがプレーン・アスキー・モードになっていないなら、この戦略は正しいとは言えません。 http://stackoverflow.com/a/12927962/2087666 –

+0

を参照してください。大文字のASCII値は小文字のASCII値よりも小さくなります。 1> a = "Ax"、b = "aa"または2> a = "aa"およびb = "AA"の場合...結果はアルファベット順のソートと矛盾します。両方の文字列を共通の "CASE"に変換して比較する方が効果的です。 – Deepeshkumar

1
int compare = a.compareTo(b); 
if (compare < 0){ 
    System.out.println(a + " is before " +b); 
} else if (compare > 0) { 
    System.out.println(b + " is before " +a); 
} else { 
    System.out.println("Strings are equal") 
} 
+0

等価の場合も追加します:) –

+0

完了 - キャッシュされた比較。 – irla

1

のJava 8であなたはこのように行うことができます、あなただけの簡単かつエレガントなコードを見て、あなたはpreoptimizeしたくない場合は、次の

String[] sorted = Stream.of(a, b).sorted().toArray(String[]::new); 
System.out.println(sorted[0] + " is before " + sorted[1]); 
関連する問題