文字列をアルファベット順に比較する


101
String s1 = "Project";
String s2 = "Sunject";

上記の2つの文字列をアルファベット順に比較します(この場合、「P」が「S」の前に来るため、「Project」、「Sunject」の順になります)。誰かがJavaでそれを行う方法を知っていますか?

回答:


121

String.compareTo あなたが必要とするものかもしれないし、そうでないかもしれません。

ローカライズされた文字列の順序が必要な場合は、このリンクをご覧ください。


8
String#compareToの辞書式比較では、大文字の「Z」が小文字の「a」の前にソートされることに注意してください大文字と小文字が混在する文字列をアルファベット順に並べる場合は、ロケールに依存した順序付けが必要です。文字列のローカライズされた順序へのリンクが機能しなくなった場合、使用するのはjava.text.Collat​​orです。
デュエリンマーカー2013

41
使用することもできますString#compareToIgnoreCase
ドリ

1
あなたはaccentued文字参照のことに対処するためにもを持っているstackoverflow.com/a/12927962/2087666
レミモリン

94

String.compareToメソッドを見てください。

s1.compareTo(s2)

javadocsから:

このStringオブジェクトが辞書式に引数文字列の前にある場合、結果は負の整数になります。このStringオブジェクトが辞書式に引数文字列に続く場合、結果は正の整数になります。文字列が等しい場合、結果はゼロです。equals(Object)メソッドがtrueを返す場合、compareToは正確に0を返します。


33
String a = "..."; 
String b = "...";  

int compare = a.compareTo(b);  

if (compare < 0) {  
    //a is smaller
}
else if (compare > 0) {
    //a is larger 
}
else {  
    //a is equal to b
} 

7

どちらかの文字列のcompareToメソッド(java.lang.String.compareTo)を呼び出すことができます。この機能は、Javaのドキュメントサイトに詳細に記載されています

これを示す短いプログラムを次に示します。

class StringCompareExample {
    public static void main(String args[]){
        String s1 = "Project"; String s2 = "Sunject";
        verboseCompare(s1, s2);
        verboseCompare(s2, s1);
        verboseCompare(s1, s1);
    }

    public static void verboseCompare(String s1, String s2){
        System.out.println("Comparing \"" + s1 + "\" to \"" + s2 + "\"...");

        int comparisonResult = s1.compareTo(s2);
        System.out.println("The result of the comparison was " + comparisonResult);

        System.out.print("This means that \"" + s1 + "\" ");
        if(comparisonResult < 0){
            System.out.println("lexicographically precedes \"" + s2 + "\".");
        }else if(comparisonResult > 0){
            System.out.println("lexicographically follows \"" + s2 + "\".");
        }else{
            System.out.println("equals \"" + s2 + "\".");
        }
        System.out.println();
    }
}

これが動作することを示すライブデモです:http : //ideone.com/Drikp3


6

国別化後のアルファベット順の場合は、を使用しますCollator

//Get the Collator for US English and set its strength to PRIMARY
Collator usCollator = Collator.getInstance(Locale.US);
usCollator.setStrength(Collator.PRIMARY);
if( usCollator.compare("abc", "ABC") == 0 ) {
    System.out.println("Strings are equivalent");
}

サポートされるロケールのリストについては、「JDK 8およびJRE 8サポートされるロケール」を参照してください。


1
import java.io.*;
import java.util.*;
public class CandidateCode {
    public static void main(String args[] ) throws Exception {
       Scanner sc = new Scanner(System.in);
           int n =Integer.parseInt(sc.nextLine());
           String arr[] = new String[n];
        for (int i = 0; i < arr.length; i++) {
                arr[i] = sc.nextLine();
                }


         for(int i = 0; i <arr.length; ++i) {
            for (int j = i + 1; j <arr.length; ++j) {
                if (arr[i].compareTo(arr[j]) > 0) {
                    String temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        for(int i = 0; i <arr.length; i++) {
            System.out.println(arr[i]);
        }
   }
}

0

他の人が示唆したように、あなたは使用することができますString.compareTo(String)

ただし、文字列のリストを並べ替えるときにが必要な場合はComparator、実装する必要はなく、Comparator.naturalOrder()またはを使用できますComparator.reverseOrder()

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.