当前位置: 首页 > 知识库问答 >
问题:

根据方括号中的值对字符串排序

伊裕
2023-03-14

我有一个字符串例如:

[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个答案

汪永春
2023-03-14

您可以简单地:

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

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

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

为什么我要输入。拆分(“(?=\ \[)”)”?

String#split可用于正则表达式,但不是标准字符“regex-wise”。因此,需要使用\[/code>(和\])对它们进行转义。

但是,在JavaString中,\也不是标准字符,也需要转义。

有关更多详细信息,请参阅有关堆栈溢出的回答。

 类似资料:
  • 问题内容: 如何获取字符串中的括号值。 我只需要AED文字。谢谢 问题答案: 编译并打印“ AED”。甚至适用于多个括号: 正则表达式表示: :字符 :开始比赛组 :以下字符之一 :不是以下字符 :与前面的一样,这表示“除” 以外的所有字符 :集合中的其他内容之一 :停止比赛组 :字面量闭式括号

  • 问题内容: PHP字符串文字中的(花括号)是什么意思? 问题答案: 这是字符串插值的复杂(弯曲)语法。从手册中: 复杂(卷曲)语法 之所以称其为“复杂”,是因为语法复杂,而是因为它允许使用复杂的表达式。 可以通过此语法包括具有字符串表示形式的任何标量变量,数组元素或对象属性。只需以与出现在字符串外部相同的方式编写表达式,然后将其包装在和中即可。由于无法转义,因此仅在紧随其后的才会识别此语法。使用

  • 期望的行为 我有一个输入验证,除其他外,测试长度(

  • 问题内容: 我想使用Java删除字符串中所有类型的方括号字符(例如:[],(),{})。 我尝试使用此代码: 但这不起作用,请帮助我。 问题答案: 要删除 _ 所有标点符号_ ,包括所有方括号,大括号和方括号…,按问题是:

  • 我有一个带有键值对的数组,数组列是id和name。我想按ID对这个数组进行排序。 id列值的类型是字符串类型,但我想将它们排序为数字值,也应该在IE上工作 尽管顺序确实发生了变化,但它并没有像预期的那样发生变化,在IE中也会抛出一个错误。

  • 问题内容: 我只需要返回字符串中方括号内包含的文本。我有以下正则表达式,但这也会返回方括号: 字符串只能包含一组方括号,例如: 我希望匹配项包含“一些重要信息”,而不是当前包含的“ [一些重要信息]”。 问题答案: 使用分组。我添加了一个使之匹配的“ ungreedy”,因为这可能就是您想要的。