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

ano*_*ous 5 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
Run Code Online (Sandbox Code Playgroud)

这需要排序为

[00:48]aaaaaa[01:07]bbbbbbb[01:36]ccccccccc[01:54]ddddddddd[02:09]eeeeeee[03:31]fffffff[03:45]gggggggg[03:59]hhhhhhhh  
Run Code Online (Sandbox Code Playgroud)

它基于方括号内的字符串.
我怎么能在java中这样做?

ccj*_*mne 10

建议的算法

你可以简单地说:

  1. 然后String在每个新时间戳拆分
  2. 最终对结果数组进行排序
  3. 连接其有序内容.

实际代码示例

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

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

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);
Run Code Online (Sandbox Code Playgroud)

输出:

[00:48]aaaaaa[01:07]bbbbbbb[01:36]ccccccccc[01:54]ddddddddd[02:09]eeeeeee[03:31]fffffff[03:45]gggggggg[03:59]hhhhhhhh
Run Code Online (Sandbox Code Playgroud)

评论部分的后续问题

我为什么这样做input.split("(?=\\[)")

String#split使用正则表达式,[(和])不是标准字符,"正则表达式".所以,他们需要被转义 - 使用\[(和\]).

但是,在Java中 String,\它既不是标准字符,也需要进行转义.

有关详细信息,请参阅Stack Overflow上的此答案.