我有一个关于比较两个字符串的快速问题。这些是我的字符串:
String s1 = "bc";
String s2 = "bb";
我的理解是s1< s2因为c出现在字母表中的b之后。所以
s1.compareTo(s2)
应返回-1。如果我用System.out.println(s1.compareTo(s2));
测试它,它会返回1.那么我理解错了什么?
答案 0 :(得分:1)
你似乎误解了"词典顺序"的意思。
由于c
位于b
之后,s1
被认为大于s2
!
将字母视为数字。 a
为1,b
为2,c
为3,依此类推。 2
后发现1
,因此2
大于1
。
因此,比较bb
和bc
就像比较22
和23
一样。显然,23
更大。
答案 1 :(得分:0)
c在ASCII表中有一个更大的索引(cast char'c'和char'b'到整数) c具有常数99和b 98,因此S1大于S2
答案 2 :(得分:0)
答案 3 :(得分:0)
我的理解是s1< s2因为c来自b之后 字母表。
它以另一种方式起作用
对于String对象,compareTo()
以这种方式工作:
按字典顺序比较两个字符串。比较是基于 字符串中每个字符的Unicode值。字符序列 由此String对象表示,按字典顺序进行比较 由参数字符串表示的字符序列。 结果是 如果此String对象按字典顺序排在前面,则为负整数 参数字符串。 如果此字符串,则结果为正整数 对象按字典顺序跟随参数字符串。结果是 如果字符串相等则为零;
Lexicographically或更简单地仅针对仅包含字母字符的字词,在字典中,"bc"
字词将跟随"bb"
字词。
因此"bc".compareTo("bb")
根据规范返回正值。
答案 4 :(得分:0)
查看String的compareTo
方法here
它说
比较基于字符串中每个字符的Unicode值。 thisString对象表示的字符序列按字典顺序与参数字符串表示的字符序列进行比较。
评估如下
this.charAt(k)-anotherString.charAt(k)
由于字符c的Unicode值高于字符b的值,因此结果为1.您所看到的是什么。
希望这有帮助