/* 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
{
{
String expression
= "(x1(x2)(x3)(x4(x5(x6)(x7)))(x8))";
System.
out.
println(getSubExpression
(expression,
"x1",
'(',
')')); System.
out.
println(getSubExpression
(expression,
"x2",
'(',
')')); System.
out.
println(getSubExpression
(expression,
"x3",
'(',
')')); System.
out.
println(getSubExpression
(expression,
"x4",
'(',
')')); System.
out.
println(getSubExpression
(expression,
"x5",
'(',
')')); System.
out.
println(getSubExpression
(expression,
"x6",
'(',
')')); System.
out.
println(getSubExpression
(expression,
"x7",
'(',
')')); System.
out.
println(getSubExpression
(expression,
"x8",
'(',
')')); }
public static String getSubExpression
(String expression,
String search,
char open,
char close
) { int idx = expression.indexOf(open + search);
if (idx == -1)
return ""; //No match.
int depth = 0;
StringBuilder builder = new StringBuilder();
for (int i = idx; i < expression.length(); i++) {
char c = expression.charAt(i);
if (c == open) depth++;
if (c == close) depth--;
builder.append(expression.charAt(i));
if (depth < 1) break;
}
return builder.toString();
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCVN0cmluZyBleHByZXNzaW9uID0gIih4MSh4MikoeDMpKHg0KHg1KHg2KSh4NykpKSh4OCkpIjsKCQkKCQlTeXN0ZW0ub3V0LnByaW50bG4oZ2V0U3ViRXhwcmVzc2lvbihleHByZXNzaW9uLCAieDEiLCAnKCcsICcpJykpOwoJCVN5c3RlbS5vdXQucHJpbnRsbihnZXRTdWJFeHByZXNzaW9uKGV4cHJlc3Npb24sICJ4MiIsICcoJywgJyknKSk7CgkJU3lzdGVtLm91dC5wcmludGxuKGdldFN1YkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgIngzIiwgJygnLCAnKScpKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oZ2V0U3ViRXhwcmVzc2lvbihleHByZXNzaW9uLCAieDQiLCAnKCcsICcpJykpOwoJCVN5c3RlbS5vdXQucHJpbnRsbihnZXRTdWJFeHByZXNzaW9uKGV4cHJlc3Npb24sICJ4NSIsICcoJywgJyknKSk7CgkJU3lzdGVtLm91dC5wcmludGxuKGdldFN1YkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgIng2IiwgJygnLCAnKScpKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oZ2V0U3ViRXhwcmVzc2lvbihleHByZXNzaW9uLCAieDciLCAnKCcsICcpJykpOwoJCVN5c3RlbS5vdXQucHJpbnRsbihnZXRTdWJFeHByZXNzaW9uKGV4cHJlc3Npb24sICJ4OCIsICcoJywgJyknKSk7Cgl9CgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN1YkV4cHJlc3Npb24oU3RyaW5nIGV4cHJlc3Npb24sIFN0cmluZyBzZWFyY2gsIGNoYXIgb3BlbiwgY2hhciBjbG9zZSkgewkKCQlpbnQgaWR4ID0gZXhwcmVzc2lvbi5pbmRleE9mKG9wZW4gKyBzZWFyY2gpOwoJCQoJCWlmIChpZHggPT0gLTEpCgkJCXJldHVybiAiIjsgLy9ObyBtYXRjaC4KCQkKCQlpbnQgZGVwdGggPSAwOwoJCQoJCVN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CgkJCgkJZm9yIChpbnQgaSA9IGlkeDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoKCk7IGkrKykgewoJCQljaGFyIGMgPSBleHByZXNzaW9uLmNoYXJBdChpKTsKCQkJCgkJCWlmIChjID09IG9wZW4pIGRlcHRoKys7CgkJCWlmIChjID09IGNsb3NlKSBkZXB0aC0tOwoJCQkKCQkJYnVpbGRlci5hcHBlbmQoZXhwcmVzc2lvbi5jaGFyQXQoaSkpOwoJCQkKCQkJaWYgKGRlcHRoIDwgMSkgYnJlYWs7CgkJfQoJCQoJCXJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cgl9Cn0=