/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
System.
out.
println(split
(" jack for { 123 for{}} rose for {}")); System.
out.
println(split
(" jack for { 123 for{} foo} rose for {}")); System.
out.
println(split
(" jack for { 123 for{}foo}fee rose for fum{}")); }
private static List
<String
> split
(String input
) { Scanner sc = new Scanner(input);
sc.useDelimiter("");
List<String> resultingParts = new ArrayList<>();
int currentNestingDepth=0;
StringBuilder currentPart= new StringBuilder();
while (sc.hasNext()) {
char c = sc.next().charAt(0);
if (c == '{') { currentNestingDepth++; }
else if (c == '}') {
currentNestingDepth--; //!\\ might fail with unbalanced parens, test > 0 if needed
if (currentNestingDepth == 0) {
currentPart.append(c);
resultingParts.add(currentPart.toString());
currentPart = new StringBuilder();
continue; // to avoid adding the current character yet again
}
}
currentPart.append(c);
}
if (currentPart.length() > 0) { resultingParts.add(currentPart.toString()); }
return resultingParts;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJICAgIFN5c3RlbS5vdXQucHJpbnRsbihzcGxpdCgiICBqYWNrICAgZm9yIHsgMTIzIGZvcnt9fSByb3NlIGZvciB7fSIpKTsKCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oc3BsaXQoIiAgamFjayAgIGZvciB7IDEyMyBmb3J7fSBmb299IHJvc2UgZm9yIHt9IikpOwoJICAgIFN5c3RlbS5vdXQucHJpbnRsbihzcGxpdCgiICBqYWNrICAgZm9yIHsgMTIzIGZvcnt9Zm9vfWZlZSByb3NlIGZvciBmdW17fSIpKTsKCX0KCQoJcHJpdmF0ZSBzdGF0aWMgTGlzdDxTdHJpbmc+IHNwbGl0KFN0cmluZyBpbnB1dCkgewoJCVNjYW5uZXIgc2MgPSBuZXcgU2Nhbm5lcihpbnB1dCk7CgkJc2MudXNlRGVsaW1pdGVyKCIiKTsKCSAgICBMaXN0PFN0cmluZz4gcmVzdWx0aW5nUGFydHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKCSAgICBpbnQgY3VycmVudE5lc3RpbmdEZXB0aD0wOwoJICAgIFN0cmluZ0J1aWxkZXIgY3VycmVudFBhcnQ9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CgkgICAgd2hpbGUgKHNjLmhhc05leHQoKSkgewoJICAgICAgICBjaGFyIGMgPSBzYy5uZXh0KCkuY2hhckF0KDApOwoJICAgICAgICBpZiAoYyA9PSAneycpIHsgY3VycmVudE5lc3RpbmdEZXB0aCsrOyB9CgkgICAgICAgIGVsc2UgaWYgKGMgPT0gJ30nKSB7CgkgICAgICAgICAgICBjdXJyZW50TmVzdGluZ0RlcHRoLS07IC8vIVxcIG1pZ2h0IGZhaWwgd2l0aCB1bmJhbGFuY2VkIHBhcmVucywgdGVzdCA+IDAgaWYgbmVlZGVkCgkgICAgICAgICAgICBpZiAoY3VycmVudE5lc3RpbmdEZXB0aCA9PSAwKSB7CgkgICAgICAgICAgICAgICAgY3VycmVudFBhcnQuYXBwZW5kKGMpOwoJICAgICAgICAgICAgICAgIHJlc3VsdGluZ1BhcnRzLmFkZChjdXJyZW50UGFydC50b1N0cmluZygpKTsKCSAgICAgICAgICAgICAgICBjdXJyZW50UGFydCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CgkgICAgICAgICAgICAgICAgY29udGludWU7IC8vIHRvIGF2b2lkIGFkZGluZyB0aGUgY3VycmVudCBjaGFyYWN0ZXIgeWV0IGFnYWluCgkgICAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICAgICBjdXJyZW50UGFydC5hcHBlbmQoYyk7CgkgICAgfQoJICAgIGlmIChjdXJyZW50UGFydC5sZW5ndGgoKSA+IDApIHsgcmVzdWx0aW5nUGFydHMuYWRkKGN1cnJlbnRQYXJ0LnRvU3RyaW5nKCkpOyB9CgkgICAgcmV0dXJuIHJlc3VsdGluZ1BhcnRzOwoJfQp9