1

我在阅读中看到了这一点,它允许您使用 compareToCaseIgnore(String) 比较两个字符串。

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 不同?我在另一个问题中读到小写字母与大写字母的价值不同,我对此有所了解,尽管并不完全。有什么地方我可以找到对此的深入解释,或者有人可以用几个例子来解释吗?我输入

cli

对于第一个字符串和

国际劳工大会

为第二个名字,得到

cli小于ilc

为什么每个字符串中字母相同的一个比另一个少?

4

1 回答 1

2

小写和大写字母确实有不同的 ASCII 值,但它们由一个常数(我认为是 42)分隔。也就是说,与as is from as is fromA等距离相同。aBbCc

ilc并且cli不同之处在于它们是完全不同的角色。

compareToIgnoreCase(或equalsIgnoreCase)进行逐个字符的比较。也就是说,它将索引0处的字符与索引处的str1字符进行比较。依此类推,对于被比较的两个字符串的每个索引。0str2

如果比较ilcand cli,则iinilc与 in 进行比较ccli它们不同),因此比较返回false。比较不关心是否i出现在第二个字符串的其他位置,它只关心第二个字符串中是否存在iI存在于它存在于第一个字符串中的相同索引处(对于所有其余字符,依此类推,尽管我想它是可能会优化到return false一旦发现一个差异)。

于 2013-10-29T23:06:44.347 回答