[ https://issues.apache.org/jira/browse/LANG-426?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13503331#comment-13503331 ]
Michael Knapp commented on LANG-426: ------------------------------------ I created LANG-860 and a patch for it, the issue is similar to this but more broad. My issue allows any escape pattern to be used when splitting a string, such as quotations around a comma. My patch also provides a solution to this issue. The patch is attached to my issue LANG-860, a committer needs to commit it. > String splitting with escaped delimiter > --------------------------------------- > > Key: LANG-426 > URL: https://issues.apache.org/jira/browse/LANG-426 > Project: Commons Lang > Issue Type: New Feature > Components: lang.text.* > Affects Versions: 2.4 > Reporter: Emmanuel Bourg > Priority: Minor > Fix For: 3.x > > Attachments: StringUtils.java > > > In Commons Configuration we use a custom split method that supports the > concept of an escaped delimiter, that may be nice if this was available in > Commons Lang (as a method in StringUtils, or as a setting in StrTokenizer). > Example: > {code} > a,b\,c,d -> ["a", "b,c", "d"] > {code} > Here is the code of the method: > {code:java} > public static List<String> split(String s, char delimiter) > { > if (s == null) > { > return new ArrayList<String>(); > } > List<String> list = new ArrayList<String>(); > StringBuilder token = new StringBuilder(); > int begin = 0; > boolean inEscape = false; > while (begin < s.length()) > { > char c = s.charAt(begin); > if (inEscape) > { > // last character was the escape marker > // can current character be escaped? > if (c != delimiter && c != LIST_ESC_CHAR) > { > // no, also add escape character > token.append(LIST_ESC_CHAR); > } > token.append(c); > inEscape = false; > } > else > { > if (c == delimiter) > { > // found a list delimiter -> add token and reset buffer > list.add(token.toString().trim()); > token = new StringBuilder(); > } > else if (c == LIST_ESC_CHAR) > { > // eventually escape next character > inEscape = true; > } > else > { > token.append(c); > } > } > begin++; > } > // Trailing delimiter? > if (inEscape) > { > token.append(LIST_ESC_CHAR); > } > // Add last token > list.add(token.toString().trim()); > return list; > } > {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira