コンマ区切り文字で文字列を分割する方法について、stackoverflow のいくつかの投稿を検索しましたが、引用符でコンマを分割しないでください (参照: 文字列をコンマで配列に分割するが、二重引用符内のコンマを無視する方法を参照してください) 。同様の結果を得るには、二重引用符を 1 つ含む文字列も許可する必要があります。
すなわち。"test05, \"test, 05\", test\", test 05"
に分割する必要があります
test05
"test, 05"
test"
test 05
ここに記載されている方法と同様の方法を試しました:
一重引用符または二重引用符で囲まれていない場合にスペースを使用して文字列を分割するための正規表現
の代わりにMatcherを使用しsplit()
ます。ただし、その特定の例は、コンマではなくスペースで分割されます。代わりに、コンマを考慮してパターンを調整しようとしましたが、うまくいきませんでした。
String str = "test05, \"test, 05\", test\", test 05";
str = str + " "; // add trailing space
int len = str.length();
Matcher m = Pattern.compile("((\"[^\"]+?\")|([^,]+?)),++").matcher(str);
for (int i = 0; i < len; i++)
{
m.region(i, len);
if (m.lookingAt())
{
String s = m.group(1);
if ((s.startsWith("\"") && s.endsWith("\"")))
{
s = s.substring(1, s.length() - 1);
}
System.out.println(i + ": \"" + s + "\"");
i += (m.group(0).length() - 1);
}
}