基于方括号中的值对字符串进行排序

时间:2014-01-31 04:34:18

标签: java regex string

我有一个字符串,例如:

[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中做到这一点?

1 个答案:

答案 0 :(得分:10)

建议的算法

你可以简单地说:

  1. 拆分每个新时间戳上的String,然后
  2. 排序生成的数组,最后
  3. 连接其订购的内容。
  4. 实际代码示例

    使用 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