【问题标题】:How to order String based on few numeric characters [closed]如何根据几个数字字符订购字符串 [关闭]
【发布时间】:2017-05-24 06:34:28
【问题描述】:

愿你平安:)

说我有:

 ----------------------------
| Hellohowruimfindandu|  30  |
 ----------------------------
| asdjflkdsjfklajlkjlk|  25  |
 ----------------------------
| sdf8sd8f97asjdkfjldl|  33  |
 ----------------------------
| sdfajsdfklajsdlfkajd|  18  |
 ----------------------------
| dfjalsjfdaldjflsdjfl|  0   |
 ----------------------------
| Hellohowruimfindandu|  15  |
 ----------------------------
| aasdklfjaklsdjaksjdf|  13  |
 ----------------------------
| jdsflkajsdflasjdfljl|  19  |

在实际代码中是这样的:

String[] Str = new String[20];
Str[0] = "Hellohowruimfindandu"+"\u0003"+"30";
Str[1] = "asdjflkdsjfklajlkjlk"+"\u0003"+"25";
// And so on

现在我想根据它的数值对这个数组进行排序。说:

 ----------------------------
| dfjalsjfdaldjflsdjfl|  0   |
 ----------------------------
| aasdklfjaklsdjaksjdf|  13  |
 ----------------------------
| Hellohowruimfindandu|  15  |

等等;

【问题讨论】:

  • 是什么阻止你这样做?
  • 是的。 Plus 变量名不应以大写字母开头。遵循 Java 命名约定并将 Str 替换为 str
  • Arrays.sort(Str, Comparator.comparingInt(s -> Integer.parseInt(s.substring(21))));
  • @ScaryWombat 是的。试图从发布的答案中学习;)
  • @Suresh Atta:我也是

标签: java arrays sorting


【解决方案1】:

对于这种类型的应用程序,更有效的方法是创建一个具有两个属性的类:String 和一个Integer。现在制作一个此类对象的列表。您可以使用 Comparator 类根据字符串(字典顺序)或整数对该列表进行排序。

例如:

你的班级应该是:

public class MyClass{
    String s;
    int value;

    MyClass(String str, int v){
        s = str;
        value = v;
    }
}

你可以把这个类列出如下:

ArrayList<MyClass> list = new ArrayList<>();
list.add(new MyClass("str1", val1));
list.add(new MyClass("str2", val2));
            ...

并排序如下:

Collections.sort(list, (a, b) -> a.value < b.value ? -1 : a.value == b.value ? 0 : 1);

以上代码仅适用于 Java8,因为它使用的是 lambda 表达式。请参阅下面没有 lambda 表达式的代码。

Collections.sort(list,new Comparator<MyClass>(){
   @Override
   public int compare(final MyClass a,MyClass b) {
     //TODO return 1 if b should be before a
     //     return -1 if a should be before b
     //     return 0 otherwise
    }
});

或者如@StutiRastogi 建议的那样,如果您不想更改结构,则必须解析整数,然后通过跟踪新旧索引对它们进行排序,然后再次根据索引对字符串进行排序.

【讨论】:

  • 虽然是真的,但这会推动改变所有现有的代码结构。相反,我更喜欢在排序方法本身中进行拆分和比较。 +1 推荐解决方案。
  • 是的,但不改变结构,拆分效率低。
【解决方案2】:

获取每个 String 元素的最后两个字符(如果您知道它只有 2 位数字),将它们解析为整数,对它们进行排序并存储索引值,然后使用该索引排序显示您的字符串。这是该方法的概述,没有实际代码,因此您可以试一试。

如果您可以更改数组的存储方式,我可以建议使用具有字符串和整数作为成员的类。这样,您可以根据需要单独对它们进行操作,并在需要时将它们连接起来。使用面向对象的方法,可能会让您的生活轻松很多。

【讨论】:

    猜你喜欢
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多