根据方括号中的值对字符串进行排序 - java

我有一个字符串,例如:

[01:07]bbbbbbb[00:48]aaaaaa[01:36]ccccccccc[03:45]gggggggg[03:31]fffffff[01:54]ddddddddd[02:09]eeeeeee[03:59]hhhhhhhh

这需要排序为

[00:48]aaaaaa[01:07]bbbbbbb[01:36]ccccccccc[01:54]ddddddddd[02:09]eeeeeee[03:31]fffffff[03:45]gggggggg[03:59]hhhhhhhh  

这是基于方括号内的字符串。
我如何在Java中做到这一点?

参考方案

建议的算法

您可以简单地:

  • 在每个新时间戳上分割您的String,然后
  • 排序得到的数组,最后
  • 连接到其有序内容。
  • 实际代码示例

    使用 Java 8 中引入的Stream库,可以在单个表达式中完成:

    final String sorted = Arrays.asList(input.split("(?=\\[)")).stream().sorted().collect(Collectors.joining());
    

    Java 8之前的原始答案

    final String input = "[01:07]bbbbbbb[00:48]aaaaaa[01:36]ccccccccc[03:45]gggggggg[03:31]fffffff[01:54]ddddddddd[02:09]eeeeeee[03:59]hhhhhhhh";
    final String entries[] = input.split("(?=\\[)");
    Arrays.sort(entries);
    
    String res = "";
    for (final String entry : entries) {
        res += entry;
    }
    
    System.out.println(res);
    

    输出:

    [00:48]aaaaaa[01:07]bbbbbbb[01:36]ccccccccc[01:54]ddddddddd[02:09]eeeeeee[03:31]fffffff[03:45]gggggggg[03:59]hhhhhhhh
    

    评论部分中的后续问题

    我为什么要input.split("(?=\\[)")
    String#split与正则表达式一起使用,但是[(和])不是标准字符,“正则表达式”。因此,需要使用\[(和\])使它们成为转义的

    但是,在Java的String中,\也不是标准字符,因此还需要对进行转义。

    有关更多详细信息,请参见this answer on Stack Overflow。

    Java:我可以在Hashmaps中使用数组吗? - java

    我可以在Hashmaps中使用数组吗?如果是这样,则声明这种哈希图的确切语法是什么?谢谢 参考方案 数组也是对象。甚至像int[]这样的原始数组。Map<String,String[]> map = new HashMap<String,String[]>();

    Java:找到特定字符并获取子字符串 - java

    我有一个字符串4.9.14_05_29_16_21,我只需要获取4.9。数字各不相同,所以我不能简单地获得此char数组的前三个元素。我必须找到最正确的.并将其子字符串化直到那里。我来自Python,因此我将展示Python的实现方法。def foobar(some_string): location = some_string.rfind('.&…

    Java string.hashcode()提供不同的值 - java

    我已经在这个问题上停留了几个小时。我已经注释掉所有代码,认为这与数组超出范围有关,但是这种情况仍在发生。我正在尝试使用扫描仪从文件中读取输入,存储数据并稍后使用哈希码获取该数据。但是哈希值不断变化。public static void main(String[] args) { //only prior code is to access data char…

    Java:正则表达式模式匹配器是否有大小限制? - java

    我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)

    Java:线程池如何将线程映射到可运行对象 - java

    试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …