Sorting a string based upon value in square bracket

java, regex, string

Solution

Suggested algorithm

You could simply:

- split your `String` on each new timestamp, then

- sort the resulting array and finally

- concatenate its ordered content.

Actual code sample

Using the `Stream` library introduced in Java 8, it can be done in within a single expression:

final String sorted = Arrays.asList(input.split("(?=\\[)")).stream().sorted().collect(Collectors.joining());

Original answer pre-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);

Output:

[00:48]aaaaaa[01:07]bbbbbbb[01:36]ccccccccc[01:54]ddddddddd[02:09]eeeeeee[03:31]fffffff[03:45]gggggggg[03:59]hhhhhhhh

Follow-up question in the comments section

why do I do `input.split("(?=\\[)")`?

`String#split` works with a Regular Expression but `[` (and `]`) are not standard characters, "regex-wise". So, they need to be escaped — using `\[` (and `\]`).

However, in a Java `String`, `\` is not a standard character either, and needs to be escaped as well.

See this answer on Stack Overflow for more details.

Problem

I have a string eg: ``` [01:07]bbbbbbb[00:48]aaaaaa[01:36]ccccccccc[03:45]gggggggg[03:31]fffffff[01:54]ddddddddd[02:09]eeeeeee[03:59]hhhhhhhh ``` this needs to be Sorted as ``` [00:48]aaaaaa[01:07]bbbbbbb[01:36]ccccccccc[01:54]ddddddddd[02:09]eeeeeee[03:31]fffffff[03:45]gggggggg[03:59]hhhhhhhh ``` which is based upon the string inside the square bracket. how can i do this in java?

Original source

Related problems