fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. /* Name of the class has to be "Main" only if the class is public. */
  8. class Ideone
  9. {
  10. public static void main (String[] args) throws java.lang.Exception
  11. {
  12. String expression = "(x1(x2)(x3)(x4(x5(x6)(x7)))(x8))";
  13.  
  14. System.out.println(getSubExpression(expression, "x1", '(', ')'));
  15. System.out.println(getSubExpression(expression, "x2", '(', ')'));
  16. System.out.println(getSubExpression(expression, "x3", '(', ')'));
  17. System.out.println(getSubExpression(expression, "x4", '(', ')'));
  18. System.out.println(getSubExpression(expression, "x5", '(', ')'));
  19. System.out.println(getSubExpression(expression, "x6", '(', ')'));
  20. System.out.println(getSubExpression(expression, "x7", '(', ')'));
  21. System.out.println(getSubExpression(expression, "x8", '(', ')'));
  22. }
  23.  
  24. public static String getSubExpression(String expression, String search, char open, char close) {
  25. int idx = expression.indexOf(open + search);
  26.  
  27. if (idx == -1)
  28. return ""; //No match.
  29.  
  30. int depth = 0;
  31.  
  32. StringBuilder builder = new StringBuilder();
  33.  
  34. for (int i = idx; i < expression.length(); i++) {
  35. char c = expression.charAt(i);
  36.  
  37. if (c == open) depth++;
  38. if (c == close) depth--;
  39.  
  40. builder.append(expression.charAt(i));
  41.  
  42. if (depth < 1) break;
  43. }
  44.  
  45. return builder.toString();
  46. }
  47. }
Success #stdin #stdout 0.07s 380224KB
stdin
Standard input is empty
stdout
(x1(x2)(x3)(x4(x5(x6)(x7)))(x8))
(x2)
(x3)
(x4(x5(x6)(x7)))
(x5(x6)(x7))
(x6)
(x7)
(x8)