如何在java中比较两个数字字符串

时间:2017-08-05 12:43:54

标签: java

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

阿什利

4 个答案:

答案 0 :(得分:3)

因为"0"小于"1"。字典比较是每个字符的字符,以不同的第一个字符停止。

String.compareTo

详细介绍了这一点
  

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

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

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

this.length()-anotherString.length()

答案 1 :(得分:2)

因为字符串比较(Comparable实现)依赖于比较String的每个字符unicode值的lexicographical比较。

并且"1"U+0031 unicode)位于"0"U+0030 unicode)之后 unicode表。

它的工作方式与字典相同,不像数字比较 您比较了一些String s,而不是一些Number s。

"azerty"出现在"zip"之前,因为"a""z"之前

"1""01"也是如此 "0"出现在"1"之前。所以"01"&lt; "1"

您可以参考String.compareTo() javadoc来更好地理解方法的合同。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

这些字符串在意外上与其他字符串相似(如逐个字符的整数)与此机制无关。如果它与您需要解决的任务相关,则需要编写代码来考虑这一点。