我有一个字符串,例如:
[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());
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。