比较两个字符串Java样式

时间:2013-10-29 23:00:54

标签: java compareto

我在阅读材料中看到这一点,允许您使用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

表示第一个字符串和

  

ILC

获得第二个名字并获得

  

cli小于ilc

为什么每个字符串中的字母小于另一个字母?

1 个答案:

答案 0 :(得分:2)

小写和大写字母确实有不同的ASCII值,但它们用常量分隔(42,我认为)。也就是说,Aa的距离与B的{​​{1}}相同,b来自C等。< / p>

cilc的不同之处在于它们是完全不同的角色。

cli(或compareToIgnoreCase)进行逐字符比较。也就是说,它将equalsIgnoreCase的索引0处的字符与str1的索引0处的字符进行比较。等等,对于要比较的两个字符串的每个索引。

如果您比较str2ilc,则cli中的i会与ilc中的c进行比较(并且它们会有所不同) ),所以比较返回cli。比较并不关心false是否出现在第二个字符串的其他位置,它只关心第二个字符串中是否存在ii,它存在于第一个字符串中的相同索引处(等等所有其他角色,虽然我想它一旦发现一个差异就可能优化到I。)