我在阅读材料中看到这一点,允许您使用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
为什么每个字符串中的字母小于另一个字母?
答案 0 :(得分:2)
小写和大写字母确实有不同的ASCII值,但它们用常量分隔(42,我认为)。也就是说,A
与a
的距离与B
的{{1}}相同,b
来自C
等。< / p>
c
和ilc
的不同之处在于它们是完全不同的角色。
cli
(或compareToIgnoreCase
)进行逐字符比较。也就是说,它将equalsIgnoreCase
的索引0
处的字符与str1
的索引0
处的字符进行比较。等等,对于要比较的两个字符串的每个索引。
如果您比较str2
和ilc
,则cli
中的i
会与ilc
中的c
进行比较(并且它们会有所不同) ),所以比较返回cli
。比较并不关心false
是否出现在第二个字符串的其他位置,它只关心第二个字符串中是否存在i
或i
,它存在于第一个字符串中的相同索引处(等等所有其他角色,虽然我想它一旦发现一个差异就可能优化到I
。)