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

问题描述 投票:5回答:1

我有一个字符串,例如:

[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中这样做?

java regex string
1个回答
10
投票

建议的算法

你可以简单地说:

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

实际代码示例

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

© www.soinside.com 2019 - 2024. All rights reserved.