2017-08-05 67 views
-1

非常愚蠢的问题,我没有得到。在比较java中的数字字符串时,为什么“01”小于“1”?如何在java中比较两个数字字符串

阿什利

+3

因为'0'<'1'。 –

+1

不知道你们为什么低估了。我不想知道如何比较字符串。我只是想知道为什么一个字符串比另一个字符串少。就这样。请在投票前仔细阅读问题。 – ashley

回答

3

由于"0"小于"1"。字典对比是每个字符的字符,停止与不同的第一个字符。

此进行详细描述String.compareTo

这是词典式排序的定义。如果两个字符串不同,那么它们在某个索引处具有不同的字符,这是两个字符串的有效索引,或者它们的长度不同,或者两者都有。如果它们在一个或多个索引位置具有不同的字符,则让这样的索引最小;那么其位置为k的字符具有较小值的字符串(通过使用<运算符确定),按字典顺序排在其他字符串之前。在这种情况下,compareTo返回两个字符值中的ķ位置在这两个串的差 - 即,值:

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

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

this.length()-anotherString.length() 
2

由于字符串比较(Comparable实现)依赖于的每个字符的Unicode值的比较lexicographical比较String s。

而且"1"U+0031 Unicode)的是根据 unicode的表之后"0"U+0030 Unicode)的。


它的工作原理相同的方式比在字典和不如数值比较
你比较一些String s,而不是一些Number s。

"azerty""zip"之前因为"a"是前"z"

这是"1""01"同样的事情。
"0""1"之前。所以"01" < "1"


您可以参考String.compareTo() javadoc来更好地了解该方法的契约。

1

假设你要比较两个字符串的数值,它们是整数:

Integer.parseInt("0") < Integer.parseInt("01") 
1

它是由语言环境来确定如何比较字符串。对于westeren语言,你有一个简单的字符排序,你从左边开始。这里最左边的字符分别是“0”和“1”,而“0”的unicode值低于“1”,立即确定以“0”开始的字符串在以“1”开始的字符串之前。

该字符串意外地类似于其他字符(如整数字符)是不涉及这种机制。如果与需要解决的任务相关,则需要编写代码以考虑这一点。