字符串和整数参数的 Java compareTo

标签 java compareto

我正在实现冒泡排序算法,我希望它能够接受 IntegerString 参数。我将所有输入转换为字符串,并使用 compareTo 方法将转换为字符串的整数与字符串进行比较。使用 compareTo 比较转换后的整数时,我得到的答案不正确。我做错了什么?

最佳答案

Integer.compareTo 按数字对数字进行排序。这就是您想要的。

String.compareTo 按字典顺序对字符串进行排序;也就是说,按字母顺序排列。

我记得在 Windows 3.1 中,我的数码相机中的照片文件夹是这样排序的:PHOTO1、PHOTO10、PHOTO100、PHOTO2、PHOTO20、PHOTO3……等等。 Windows XP 对它们的排序更符合您的预期:PHOTO1、PHOTO2、PHOTO3 等。这是因为它对表示数字的字符串有特殊的排序规则。

在字典顺序中,将一个字符串 A 中的每个字符与另一个字符串 B 中的对应字符进行比较。对于两个字符串中的每个对应字符:

  • 如果 A 的当前字符在字典序上小于(在字母表中排在前面)B 的字符,则 A 排在 B 之前。
  • 如果 B 的字符小于 A 的字符,则 B 在 A 之前。
  • 如果这两个字符相同,那么我们还不知道。检查下一个。
  • 如果其中一个字符串中没有剩余字符,则较短的字符排在较长的字符之前。
  • 如果两个字符串中都没有剩余字符,则它们是同一个字符串。

这里的第四点是假设 Eddie 对您的问题的分析是正确的,为什么您会得到错误的答案。

考虑字符串“10”和“2”。字典顺序将分别查看每个字符的第一个字符“1”和“2”。在 Java 使用的字符集中,字符“1”排在“2”之前,因此它将“10”排在“2”之前,就像“bare”排在“hare”之前一样,因为“b”排在“”之前h'.

我建议您在排序之前将字符串转换为整数。使用 Integer.parseString 来执行此操作。

关于字符串和整数参数的 Java compareTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/900745/

相关文章:

java - 如何在 Java 中的字符串上使用 Comparable CompareTo

java - 如何编写比较对象的 compareTo 方法?

java - 在 GridPane JavaFx 中选择单元格

java - 为什么从不同的类引用 Image 时会出现 java.lang.NullPointerException ?

java - 如何从列元数据中确定列大小是以字节为单位还是以字符为单位?

java compareTo不适用于两位数

java - 使用 Collections.sort 对对象 ArrayList 进行排序

java - java的compareTo()方法表现得很奇怪

java - 如何将此文本文件读入以下类数组?

java - 自定义扩展点的最佳实现是什么