/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static List
<String
> getList
(String value
) {
String regex
= "(?:(?:^|,|\\r?\\n)\\s*)(?:(?:(\"[^\"\\\\]*(?:\\\\[\\S\\s][^\"\\\\]*)*\"|“[^“”\\\\]*(?:\\\\[\\S\\s][^“”\\\\]*)*”))(?:\\s*(?:(?=,|\\r?\\n)|$))|([^,]*)(?:\\s*(?:(?=,)|$)))"; List<String> allMatches = new ArrayList<String>();
if ( value.length() > 0 )
{
Matcher m = Pattern.compile( regex ).matcher( value );
while ( m.find() ) {
if ( str == null ) {
str = m.group(1);
str = str.replaceAll( "^[\"“”]|[\"“”]$", "" );
}
allMatches.add(str.trim());
}
}
return allMatches;
}
{
List<String> result = getList("400,test,\"QT_don't split, this_QT\",15");
result = getList("500,test,“LQT_don't split, this_RQT”,15");
result = getList("600,test,\"QT_don't split, this_QT\",15");
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwogCmltcG9ydCBqYXZhLnV0aWwuKjsKaW1wb3J0IGphdmEubGFuZy4qOwppbXBvcnQgamF2YS5pby4qOwppbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7CmltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLyogTmFtZSBvZiB0aGUgY2xhc3MgaGFzIHRvIGJlICJNYWluIiBvbmx5IGlmIHRoZSBjbGFzcyBpcyBwdWJsaWMuICovCmNsYXNzIElkZW9uZQp7CgkKCXB1YmxpYyBzdGF0aWMgTGlzdDxTdHJpbmc+IGdldExpc3QoU3RyaW5nIHZhbHVlKQoJewogICAgCVN0cmluZyByZWdleCA9ICIoPzooPzpefCx8XFxyP1xcbilcXHMqKSg/Oig/OihcIlteXCJcXFxcXSooPzpcXFxcW1xcU1xcc11bXlwiXFxcXF0qKSpcInzigJxbXuKAnOKAnVxcXFxdKig/OlxcXFxbXFxTXFxzXVte4oCc4oCdXFxcXF0qKSrigJ0pKSg/OlxccyooPzooPz0sfFxccj9cXG4pfCQpKXwoW14sXSopKD86XFxzKig/Oig/PSwpfCQpKSkiOyAKICAgIAlMaXN0PFN0cmluZz4gYWxsTWF0Y2hlcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwogICAgCWlmICggdmFsdWUubGVuZ3RoKCkgPiAwICApCiAgICAJewogICAgICAgIAlNYXRjaGVyIG0gPSBQYXR0ZXJuLmNvbXBpbGUoIHJlZ2V4ICkubWF0Y2hlciggdmFsdWUgKTsKICAgICAgICAJd2hpbGUgKCBtLmZpbmQoKSApIHsKICAgICAgICAJCVN0cmluZyBzdHIgPSBtLmdyb3VwKDIpOwogICAgICAgIAkJaWYgKCBzdHIgPT0gbnVsbCApIHsKICAgICAgICAJCQlzdHIgPSBtLmdyb3VwKDEpOwoJICAgICAgICAgICAgCXN0ciA9IHN0ci5yZXBsYWNlQWxsKCAiXltcIuKAnOKAnV18W1wi4oCc4oCdXSQiLCAiIiApOwogICAgICAgIAkJfQogICAgICAgICAgICAJYWxsTWF0Y2hlcy5hZGQoc3RyLnRyaW0oKSk7CiAgICAgICAgCX0KICAgIAl9CiAgICAJcmV0dXJuIGFsbE1hdGNoZXM7Cgl9CgoKCXB1YmxpYyBzdGF0aWMgIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQlMaXN0PFN0cmluZz4gIHJlc3VsdCA9IGdldExpc3QoIjQwMCx0ZXN0LFwiUVRfZG9uJ3Qgc3BsaXQsIHRoaXNfUVRcIiwxNSIpOwogICAgCVN5c3RlbS5vdXQucHJpbnRsbiggcmVzdWx0ICk7CiAgICAJCgkJcmVzdWx0ID0gZ2V0TGlzdCgiNTAwLHRlc3Qs4oCcTFFUX2Rvbid0IHNwbGl0LCB0aGlzX1JRVOKAnSwxNSIpOwogICAgCVN5c3RlbS5vdXQucHJpbnRsbiggcmVzdWx0ICk7CiAgICAJCgkJcmVzdWx0ID0gZ2V0TGlzdCgiNjAwLHRlc3QsXCJRVF9kb24ndCBzcGxpdCwgdGhpc19RVFwiLDE1Iik7CiAgICAJU3lzdGVtLm91dC5wcmludGxuKCByZXN1bHQgKTsKICAgIAkKCX0KfQ==
[400, test, QT_don't split, this_QT, 15]
[500, test, LQT_don't split, this_RQT, 15]
[600, test, QT_don't split, this_QT, 15]