如何在Java中使用整数对字符串进行排序?

时间:2013-01-11 11:15:12

标签: java arrays string ascii compareto

我有一个阵列。我的数组中的每个空格都包含两个字符串(一个字符串只包含字母,另一个字符串包含数字)。

我现在要做的是按字母顺序或数字顺序对数组进行排序(取决于选择数组中的哪个空格)。为此,我使用compareTo()方法。但是,我发现当我尝试根据数字对数组进行排序时,它实际上并没有真正起作用。

我的猜测是,由于Java使用ascii代码处理字符串,因此数字不会按数字顺序显示。

问题:我该如何解决这个问题?

5 个答案:

答案 0 :(得分:2)

compareTo()方法中,当您检测到您正在查看表示整数的两个字符串时,请确保它们在进行比较之前具有相同的长度。如果一个字符串较短,则在其前面加零,直到字符串长度相等。

例如,32123过去没有与默认算法正确比较: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)

在比较字符串之前,将字符串数字转换为数字。