比较字符串比较什么?

时间:2015-12-01 10:20:29

标签: java string comparator string-comparison

我有两个字符串:

String s1 ="11:7:34"
String s2="11:34:34"

当我比较两个字符串时,我得到结果:false

(s1.compareTo(s2) < 0)

但是当我比较这个字符串时,我得到了真的:

String s1 ="11:07:34"
String s2="11:34:34"

所以我的问题是,在这种情况下会比较什么?弦乐的长度或弦乐的性格还是什么?我认为&#34; 11:07:34&#34;和&#34; 11:7:34&#34;应该提供相同的结果!!

6 个答案:

答案 0 :(得分:2)

字符串的自然顺序是字典顺序。两个字符串包含不同字符的第一个位置决定了比较的结果。

s1 11:7:34
s2 11:34:34     // the first non equal characters are 7 and 3, 7 comes after 3
      _         // so s1 comes after s2 (i.e. s1.compareTo(s2) > 0)


s1 11:07:34
s2 11:34:34     // the first non equal characters are 0 and 3, 3 comes after 0
      _         // so s1 comes before s2 (i.e. s1.compareTo(s2) < 0)

答案 1 :(得分:2)

比较字符串的字符。由于7不小于3,但0是,您的结果是预期的。 String.compareTo无法识别您对H:m:s的语义。

答案 2 :(得分:2)

它比较字母/数字顺序。

因此,订单是

&#34; 11:0&#34; &#34; 11:3&#34; &#34; 11:7&#34;

答案 3 :(得分:1)

您可以阅读documentation

  

按字典顺序比较两个字符串。比较是基于   字符串中每个字符的Unicode值。字符序列   由此String对象表示,按字典顺序进行比较   由参数字符串表示的字符序列。结果是   如果此String对象按字典顺序排在前面,则为负整数   参数字符串。如果是这个String,结果是一个正整数   对象按字典顺序跟随参数字符串。结果是   如果字符串相等则为零; compareTo正好返回0   equals(Object)方法将返回true。

     

这是定义   词典排序。如果两个字符串不同,那么它们   在某个索引处有不同的字符,这两个索引都是两者的有效索引   字符串,或它们的长度不同,或两者兼而有之。如果他们有   在一个或多个索引位置的不同字符,让k为   最小的指数;然后是位置k处的字符所具有的字符串   较小的值,通过使用&lt;运营商,   按字典顺序排列在另一个字符串之前。在这种情况下,compareTo   返回位置k in的两个字符值的差值   两个字符串 - 即值:

this.charAt(k)-anotherString.charAt(k)
  

如果没有它们不同的索引位置,则更短   字符串按字典顺序排在较长的字符串之前。在这种情况下,   compareTo返回字符串长度的差异 - 即   是,值:

this.length()-anotherString.length()

答案 4 :(得分:1)

您认为它应该给出相同的结果,因为您可以将字符串解释为次。 Java不知道字符串代表时间值。

正如其他人所述,字符串是字符的比较,因此clearfix小于clearfix

您应该考虑将字符串转换为表示时间的类。例如,使用新的Java 8 Date and Time API:

group

然后您可以使用

比较新值
3

答案 5 :(得分:1)

它通过charcter与ASCII代码比较charcter。 顺便说一句,以这种方式比较时间并不是一个好主意