【问题标题】:Sorting a string based upon value in square bracket根据方括号中的值对字符串进行排序
【发布时间】:2014-01-31 04:34:18
【问题描述】:

我有一个字符串,例如:

[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】:

推荐算法

你可以简单地:

  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

cmets部分的后续问题

我为什么要input.split("(?=\\[)")

String#split正则表达式 一起使用,但 [(和 ])不是标准字符,“正则表达式”。所以,他们需要转义——使用\[(和\])。

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

更多详情请见this answer on Stack Overflow

【讨论】:

  • @ccjmne 你能解释一下 input.split("\["),我知道拆分方法,但从未见过这种拆分。非常感谢 Lil 的详细说明。
  • @kapilchhattani 当然,你是对的,我应该/可以解释这一点。我只是在我的答案中添加了这个解释。感谢您指出这一点!
猜你喜欢
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
  • 2020-05-19
相关资源
最近更新 更多