我有一个字符串,例如:
[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中做到这一点?
答案 0 :(得分:10)
你可以简单地说:
String
,然后使用 Java 8 中引入的Stream
库,可以在单个表达式中完成:
final String sorted = Arrays.asList(input.split("(?=\\[)")).stream().sorted().collect(Collectors.joining());
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。