我有一个阵列。我的数组中的每个空格都包含两个字符串(一个字符串只包含字母,另一个字符串包含数字)。
我现在要做的是按字母顺序或数字顺序对数组进行排序(取决于选择数组中的哪个空格)。为此,我使用compareTo()方法。但是,我发现当我尝试根据数字对数组进行排序时,它实际上并没有真正起作用。
我的猜测是,由于Java使用ascii代码处理字符串,因此数字不会按数字顺序显示。
问题:我该如何解决这个问题?
答案 0 :(得分:2)
在compareTo()
方法中,当您检测到您正在查看表示整数的两个字符串时,请确保它们在进行比较之前具有相同的长度。如果一个字符串较短,则在其前面加零,直到字符串长度相等。
例如,32
和123
过去没有与默认算法正确比较:3
更大,因此32
比较132
之后。但是,一旦您将前置零,则比较会再次起作用:032
小于123
。
答案 1 :(得分:1)
为了比较数字,这可能会有所帮助。
Alphanum算法
来自网站:http://www.davekoelle.com/alphanum.html
人们使用与软件不同的数字对字符串进行排序。大多数排序算法都会比较ASCII值,这会产生与人类逻辑不一致的排序。以下是修复方法。
以下是该站点的Java Comparator Implementation链接。 http://www.davekoelle.com/files/AlphanumComparator.java
答案 2 :(得分:1)
是的,你是对的,字符串根据其Unicode代码点值进行排序。这意味着“2”小于“a”且大于“11”。
我怀疑您正在寻找自然排序订单。关于它的一篇很好的SO帖子是Java String Number Comparator,您可以在SO帖子中找到实际的实现Natural sort order string comparison in Java - is one built in?
答案 3 :(得分:0)
您可以使用Long(或)Folat.isNaN()方法检查其编号或刺痛,然后使用它可以进行排序。
答案 4 :(得分:0)
在比较字符串之前,将字符串数字转换为数字。