我有两个字符串:
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;应该提供相同的结果!!
答案 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。 顺便说一句,以这种方式比较时间并不是一个好主意