commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Emmanuel Bourg (JIRA)" <j...@apache.org>
Subject [jira] Created: (LANG-426) String splitting with escaped delimiter
Date Tue, 15 Apr 2008 12:47:05 GMT
String splitting with escaped delimiter
---------------------------------------

                 Key: LANG-426
                 URL: https://issues.apache.org/jira/browse/LANG-426
             Project: Commons Lang
          Issue Type: New Feature
    Affects Versions: 2.4
            Reporter: Emmanuel Bourg
            Priority: Minor
             Fix For: 3.0


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.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message