2

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

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

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

问题:我该如何解决?

4

5 回答 5

2

对于比较数字,这可能会有所帮助。

字母算法

来自网站:http ://www.davekoelle.com/alphanum.html

人们对带有数字的字符串进行排序与​​软件不同。大多数排序算法比较 ASCII 值,这会产生与人类逻辑不一致的排序。这是修复它的方法。

这是来自该站点的 Java 比较器实现的链接。 http://www.davekoelle.com/files/AlphanumComparator.java

于 2013-01-11T11:19:20.627 回答
2

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

例如,32and123用于与默认算法不正确比较:3更大,因此32比较为 after 132。但是,一旦您在前面加上零,比较就会再次起作用:032小于123.

于 2013-01-11T11:20:40.133 回答
1

是的,你是对的,字符串是根据它们的 Unicode 代码点值排序的。这意味着“2”小于“a”且大于“11”。

我怀疑您正在寻找Natural Sort OrderJava String Number Comparator是一篇很棒的 SO 帖子,详细介绍了它,您可以在 SO 帖子中找到实际实现Java 中的自然排序顺序字符串比较 - 是内置的吗?

于 2013-01-11T11:23:26.280 回答
0

您可以使用 Long(or)Folat.isNaN() 方法来检查其编号或刺痛,然后使用该方法进行排序。

于 2013-01-11T11:21:05.413 回答
0

在对字符串进行数字排序之前,先将它们转换为数字。

于 2013-01-11T11:26:41.890 回答