1

これは、compareToCaseIgnore(String) を使用して 2 つの文字列を比較できるようにする読み取りで見ました。

public class CompareWithoutCase
{
   public static void main(String [] args)
   {
        String name1, name2;  // To hold two names

        // Create a Scanner object to read input.
        Scanner keyboard = new Scanner(System.in);

        // Get a name.
        System.out.print("Enter a name: ");
        name1 = keyboard.nextLine();

        // Get another name.
        System.out.print("Enter another name: ");
        name2 = keyboard.nextLine();

        // Compare the names.
        if (name1.compareToIgnoreCase(name2) < 0)
        {
           System.out.println(name1 + " is less than " + name2);
        }
        else if (name1.compareToIgnoreCase(name2) == 0)
        {
           System.out.println(name1 + " is equal to " + name2);
        }
        else if (name1.compareToIgnoreCase(name2) > 0)
        {
           System.out.println(name1 + " is greater than " + name2);
        }
    }
}

私の質問は、cli などの文字列が同じ文字を保持している場合、値が ilc と異なるのはなぜですか? 別の質問で、小文字は大文字とは値が異なることを読みましたが、完全ではありませんが、それをある程度理解しています。これについての詳細な説明を見つけることができる場所はありますか、または誰かがいくつかの例で説明できますか? 入力しました

クリ

最初の文字列と

ILC

2 番目の名前を取得し、

cli は ilc より小さい

各文字列に同じ文字がある場合、一方が他方よりも小さいのはなぜですか?

4

1 に答える 1

2

小文字と大文字の ASCII 値は異なりますが、定数 (42 だと思います) で区切られています。つまり、 は から とからと同じ距離Aです。aBbCc

ilccliまったく別のキャラクターであるという点で異なります。

compareToIgnoreCase(またはequalsIgnoreCase) は、文字ごとの比較を行います。つまり、インデックス の文字とインデックス の文字を比較0str1ます。比較される 2 つの文字列のすべてのインデックスについても同様です。0str2

と を比較するilccliiinilcは in と比較さcれるcli(そしてそれらは異なる) ため、比較は を返しますfalse。比較は、2 番目の文字列の他の場所に表示されるかどうかは気にしません。最初の文字列に存在するのと同じインデックスで 2 番目の文字列に存在するかiどうかのみを気にします (残りのすべての文字についても同様ですが、それはおそらく、1 つの違いが見つかるとすぐに最適化されます)。iIreturn false

于 2013-10-29T23:06:44.347 に答える