字符串比较要理解

时间:2018-01-13 09:59:55

标签: java comparable

我有一个关于比较两个字符串的快速问题。这些是我的字符串:

String s1 = "bc";
String s2 = "bb";

我的理解是s1< s2因为c出现在字母表中的b之后。所以 s1.compareTo(s2)应返回-1。如果我用System.out.println(s1.compareTo(s2));测试它,它会返回1.那么我理解错了什么?

5 个答案:

答案 0 :(得分:1)

你似乎误解了"词典顺序"的意思。

由于c位于b之后,s1被认为大于s2

将字母视为数字。 a为1,b为2,c为3,依此类推。 2后发现1,因此2大于1

因此,比较bbbc就像比较2223一样。显然,23更大。

答案 1 :(得分:0)

c在ASCII表中有一个更大的索引(cast char'c'和char'b'到整数) c具有常数99和b 98,因此S1大于S2

答案 2 :(得分:0)

来自doc

  

返回值:

     

如果参数字符串等于此字符串,则值为0;一个值   如果此字符串按字典顺序小于字符串,则小于0   参数;如果此字符串为,则值大于0   按字典顺序大于字符串参数。

答案 3 :(得分:0)

  

我的理解是s1< s2因为c来自b之后   字母表。

它以另一种方式起作用 对于String对象,compareTo()以这种方式工作:

  

按字典顺序比较两个字符串。比较是基于   字符串中每个字符的Unicode值。字符序列   由此String对象表示,按字典顺序进行比较   由参数字符串表示的字符序列。 结果是   如果此String对象按字典顺序排在前面,则为负整数   参数字符串。 如果此字符串,则结果为正整数   对象按字典顺序跟随参数字符串。结果是   如果字符串相等则为零;

Lexicographically或更简单地仅针对仅包含字母字符的字词,在字典中,"bc"字词将跟随"bb"字词。
因此"bc".compareTo("bb")根据规范返回正值。

答案 4 :(得分:0)

查看String的compareTo方法here

的java doc

它说

  

比较基于字符串中每个字符的Unicode值。 thisString对象表示的字符序列按字典顺序与参数字符串表示的字符序列进行比较。

评估如下 this.charAt(k)-anotherString.charAt(k)

由于字符c的Unicode值高于字符b的值,因此结果为1.您所看到的是什么。

查看Unicode list

希望这有帮助