fork(1) download
  1. import java.util.*;
  2. import java.util.regex.*;
  3.  
  4. class Demo {
  5. static public void main(String[] args) {
  6. String[] arr = new String[2];
  7. arr[1] = "CATEGORYTYPE1\n"
  8. + "{\n"
  9. + " CATEGORYSUBTYPE1\n"
  10. + " {\n"
  11. + " OPTION1 \"ABcd efg1234\"\n"
  12. + " OPTION2 ABCdefg12345\n"
  13. + " OPTION3 15\n"
  14. + " }\n"
  15. + " CATEGORYSUBTYPE2\n"
  16. + " {\n"
  17. + " OPTION1 \"Blah Blah 123\"\n"
  18. + " OPTION2 Blah\n"
  19. + " OPTION3 10\n"
  20. + " OPTION4 \"Blah\"\n"
  21. + " }\n"
  22. + "}";
  23. arr[0] = "ab \"cd \\\"ef\\\" gh\" ij \"kl \\\"no pq\\\"\\\" rs\"";
  24.  
  25. Pattern p = Pattern.compile("(\\S*?\".*?(?<!\\\\)\")+\\S*|\\S+");
  26.  
  27. for (String str : arr) {
  28. System.out.format("Original string: %s%nAfter splitting:%n", str);
  29.  
  30. Matcher m = p.matcher(str);
  31. while (m.find()) {
  32. System.out.format("|%s|%n", m.group(0));
  33. }
  34.  
  35. System.out.println();
  36. }
  37. }
  38. }
  39.  
Success #stdin #stdout 0.07s 380224KB
stdin
Standard input is empty
stdout
Original string: ab "cd \"ef\" gh" ij "kl \"no pq\"\" rs"
After splitting:
|ab|
|"cd \"ef\" gh"|
|ij|
|"kl \"no pq\"\" rs"|

Original string: CATEGORYTYPE1
{
    CATEGORYSUBTYPE1
    {
        OPTION1 "ABcd efg1234"
        OPTION2 ABCdefg12345
        OPTION3 15
    }
    CATEGORYSUBTYPE2
    {
        OPTION1 "Blah Blah 123"
        OPTION2 Blah
        OPTION3 10
        OPTION4 "Blah"
    }
}
After splitting:
|CATEGORYTYPE1|
|{|
|CATEGORYSUBTYPE1|
|{|
|OPTION1|
|"ABcd efg1234"|
|OPTION2|
|ABCdefg12345|
|OPTION3|
|15|
|}|
|CATEGORYSUBTYPE2|
|{|
|OPTION1|
|"Blah Blah 123"|
|OPTION2|
|Blah|
|OPTION3|
|10|
|OPTION4|
|"Blah"|
|}|
|}|