java - 对具有负整数的数字字符串进行排序

标签 java algorithm sorting

这两天查了很多资料都没有成功,

现在我有包含 7 个整数(+ 和 -)的字符串,并用逗号分隔。

我写了一个示例代码来解释。

        ArrayList<String> str = new ArrayList<String>();

        str.add("9,-9,21,23,28,29,35");
        str.add("18,18,-21,28,28,32,34");
        str.add("-11,-11,22,28,29,-30,31");
        str.add("8,-8,26,31,31,31,31");
        str.add("8,8,26,-32,25,29,35");
        str.add("10,9,-21,45,25,29,35");
        str.add("-11,59,21,25,25,-29,35");
        str.add("12,-9,21,55,25,29,15");
        str.add("9,9,21,25,25,-29,35");
        str.add("7,9,21,25,-35,25,35");
        str.add("4,-39,21,-15,25,-29,35");
        str.add("9,9,21,25,27,29,-35");
        str.add("10,9,21,35,25,39,15");
        str.add("8,-9,21,-25,25,29,-35");
        str.add("18,-9,21,-23,25,29,-35");

        Collections.sort(str);

这不会返回正确的排序数组。它测试数字的第一位并继续排序。

但我想要的是,排序必须基于字符串中的第一个数字。仅当数字相同时(假设字符串数组的第一个数字中有三个 9),它才应该检查这些数字中的第二个数字(单独的捆绑字符串)并相应地排序,依此类推。

结果应该是这样的

9 , -9 , 21 , 23 , 28 , 29 , 35
9 , 9 , 21 , 25 , 25 , -29 , 35
9 , 9 , 21 , 25 , 27 , 29 , -35

这个方法里有没有排序的方法。如果有的话请告诉我,欢迎任何相关答案。

提前致谢。

最佳答案

您为所需的排序语义使用了不正确的数据类型。 Java 看到您想要对字符串进行排序,因此它会按字典顺序对它们进行排序,因为您没有告诉它这样做。 Java 不会读心术:)

不要尝试对字符串进行排序,如“9,-9,21,23,28,29,35”,而是对整数数组进行排序,如{9, 9, -9, 21, 23, 28, 29、35}。您仍然需要为比较器编写自己的逻辑,但现在相对容易,因为您不必进行任何字符串解析。

如果您需要排序的数据以字符串格式到达您的程序,请尝试对 ',' 进行 split,然后将字符串数组的每个组成部分解析为 int,最后将其全部转储到 int 数组或 ArrayList 中。

关于java - 对具有负整数的数字字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16075137/

相关文章:

java - 如何读取以逗号分隔的文件

java - 如何确定 Swing 分量?

算法数学 - 我该如何解决和替代?

algorithm - 3D 空间 : following the direction that an object is pointing towards, 使用鼠标指针

r - 使用 ggplot 对 y 轴上的数据进行排序

java - 读取ArrayList元素

java - 我需要实现 hashCode() 和 equals() 方法吗?

algorithm - 数组中每个位置左侧不同的较小元素的数量

ios - 如何基于数组快速对多个数组进行排序?

c++ - 创建一个比较函数来对 C 风格的字符串进行排序