I asked this question earlier and it was closed because it was a duplicate, which I accept and actually found the answer in the question Java: splitting a comma-separated string but ignoring commas in quotes, so thanks to whoever posted it.
But I’ve since run into another issue. Apparently what I need to do is use “,” as my delimiter when there are zero or an even number of double-quotes, but also ignore any “,” contained in brackets.
So the following:
"Thanks,", "in advance,", "for("the", "help")"
Would tokenize as:
- Thanks,
- in advance,
- for(“the”, “help”)
I’m not sure if there’s anyway to modify the current regex I’m using to allow for this, but any guidance would be appreciated.
line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
Sometimes it is easier to match what you want instead of what you don’t want:
Output:
If you also need it to ignore closing brackets inside the quotes sections that are inside the brackets, then you need this:
An example of a string which needs this second, more complex version is:
Output:
However, I’d advise you to change your data format if at all possible. This would be a lot easier if you used a standard format like XML to store your tokens.