是否可以按照以下条件拆分字符串?
- 用 , (即逗号)分隔
- 在每个元素上,忽略第一个 ' 和最后一个 ' 内的逗号检查
- 在每个元素上,忽略第一个(和最后一个)内的逗号检查
e.g.
String source = "to_char(DATE, 'YYYY,MM,DD'), 'I am sad :(', to_char(DATE, ('YYYY(MM,DD)')), to_char(DATE, ('YYYY,MM,DD)')), to_char(DATE, ('YYYY(MM,DD')), NAME, to_char(DATE, '(YYYY)MM,DD'), CITY || ', (UK)', CITY || ', US''s CITY', CITY || ', UK'";
String[] expected = new String[]{
"to_char(DATE, 'YYYY,MM,DD')",
"'I am sad :('",
"to_char(DATE, ('YYYY(MM,DD)'))", // brackets within quotes within brackets
"to_char(DATE, ('YYYY,MM,DD)'))", // missing open bracket in quotes
"to_char(DATE, ('YYYY(MM,DD'))", // missing close bracket in quotes
"NAME",
"to_char(DATE, '(YYYY)MM,DD')",
"CITY || ', (UK)'",
"CITY || ', US''s CITY'", // escape a single quote in quotes
"CITY || ', UK'"
};
String[] result = splitElements(source);
assert expected.equals(result);
前 2 个要点可以通过以下方式实现当存在转义引号时,在引号外的逗号上拆分 https://stackoverflow.com/questions/32402929/splitting-on-comma-outside-quotes-when-escaped-quotes-exist/32403228#32403228
这在使用 SQL 进行操作时非常有用。例如。拆分项目、追加、插入、前置项目等。
提前致谢。