fork(1) download
  1. import java.util.*;
  2. import java.lang.*;
  3. import java.io.*;
  4. import java.util.regex.*;
  5.  
  6. class Ideone
  7. {
  8. public static void main (String[] args) throws java.lang.Exception
  9. {
  10. String input = "Jim ate a [sandwich][ooh] with [pickles] and [dried [onions]] and ] [an[other] match] and more here";
  11. List<String> between_balanced = getStrsBetweenBalancedSubstrings(input, '[', ']');
  12. System.out.println("Result: " + between_balanced);
  13. }
  14. public static List<String> getStrsBetweenBalancedSubstrings(String s, Character markStart, Character markEnd) {
  15. List<String> subTreeList = new ArrayList<String>();
  16. int level = 0;
  17. int lastCloseBracket= 0;
  18. for (int i = 0; i < s.length(); i++) {
  19. char c = s.charAt(i);
  20. if (c == markStart) {
  21. level++;
  22. if (level == 1) {
  23. if (i != 0 && i!=lastCloseBracket && !s.substring(lastCloseBracket, i).trim().isEmpty()) {
  24. subTreeList.add(s.substring(lastCloseBracket, i).trim());
  25. }
  26. }
  27. } else if (c == markEnd) {
  28. if (level > 0) {
  29. level--;
  30. lastCloseBracket = i+1;
  31. }
  32. }
  33. }
  34. if (lastCloseBracket != s.length() && !s.substring(lastCloseBracket).trim().isEmpty()) {
  35. subTreeList.add(s.substring(lastCloseBracket).trim());
  36. }
  37. return subTreeList;
  38. }
  39. }
Success #stdin #stdout 0.05s 27764KB
stdin
Standard input is empty
stdout
Result: [Jim ate a, with, and, and ], and more here]