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. boolean inQuoted = false;
  13.  
  14. List<String> parts = new ArrayList<String>();
  15. String s = "\"start \\\"title\\\" end\", 10, 20, \"text\"";
  16. StringBuilder current = new StringBuilder();
  17. for( int i=0; i<s.length(); i++ ){
  18. char c = s.charAt(i);
  19. char cPrev = ( i == 0 ? (char)0 : s.charAt(i-1));
  20.  
  21. if( c == '"' && cPrev != '\\' ){
  22. inQuoted = !inQuoted;
  23. }
  24.  
  25. if( c == ',' && !inQuoted ){
  26. if( current.length() > 0 ){
  27. parts.add(current.toString());
  28. current = new StringBuilder();
  29. }
  30. }
  31. else {
  32. int length = current.length();
  33. if( length > 1 && c == '"' && current.charAt(length-1) == '\\' ){
  34. current.deleteCharAt(length-1);
  35. }
  36. current.append(c);
  37. }
  38. }
  39. if( current.length() > 0 ){
  40. parts.add(current.toString());
  41. }
  42.  
  43. System.out.println(parts);
  44. }
  45. }
Success #stdin #stdout 0.06s 380224KB
stdin
Standard input is empty
stdout
["start "title" end",  10,  20,  "text"]