Home / Function/ unescapeCsvFields() — netty Function Reference

unescapeCsvFields() — netty Function Reference

Architecture documentation for the unescapeCsvFields() function in StringUtil.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  bd846ba1_12ef_ee83_8fdc_f5983f04e319["unescapeCsvFields()"]
  2bdecda8_5186_4936_ca05_ebee455a476a["StringUtil"]
  bd846ba1_12ef_ee83_8fdc_f5983f04e319 -->|defined in| 2bdecda8_5186_4936_ca05_ebee455a476a
  9ae04130_cb77_ad88_9318_e6bd1d7cbcd4["length()"]
  bd846ba1_12ef_ee83_8fdc_f5983f04e319 -->|calls| 9ae04130_cb77_ad88_9318_e6bd1d7cbcd4
  style bd846ba1_12ef_ee83_8fdc_f5983f04e319 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

common/src/main/java/io/netty/util/internal/StringUtil.java lines 495–557

    public static List<CharSequence> unescapeCsvFields(CharSequence value) {
        List<CharSequence> unescaped = new ArrayList<CharSequence>(2);
        StringBuilder current = InternalThreadLocalMap.get().stringBuilder();
        boolean quoted = false;
        int last = value.length() - 1;
        for (int i = 0; i <= last; i++) {
            char c = value.charAt(i);
            if (quoted) {
                switch (c) {
                    case DOUBLE_QUOTE:
                        if (i == last) {
                            // Add the last field and return
                            unescaped.add(current.toString());
                            return unescaped;
                        }
                        char next = value.charAt(++i);
                        if (next == DOUBLE_QUOTE) {
                            // 2 double-quotes should be unescaped to one
                            current.append(DOUBLE_QUOTE);
                            break;
                        }
                        if (next == COMMA) {
                            // This is the end of a field. Let's start to parse the next field.
                            quoted = false;
                            unescaped.add(current.toString());
                            current.setLength(0);
                            break;
                        }
                        // double-quote followed by other character is invalid
                        throw newInvalidEscapedCsvFieldException(value, i - 1);
                    default:
                        current.append(c);
                }
            } else {
                switch (c) {
                    case COMMA:
                        // Start to parse the next field
                        unescaped.add(current.toString());
                        current.setLength(0);
                        break;
                    case DOUBLE_QUOTE:
                        if (current.length() == 0) {
                            quoted = true;
                            break;
                        }
                        // double-quote appears without being enclosed with double-quotes
                        // fall through
                    case LINE_FEED:
                        // fall through
                    case CARRIAGE_RETURN:
                        // special characters appears without being enclosed with double-quotes
                        throw newInvalidEscapedCsvFieldException(value, i);
                    default:
                        current.append(c);
                }
            }
        }
        if (quoted) {
            throw newInvalidEscapedCsvFieldException(value, last);
        }
        unescaped.add(current.toString());
        return unescaped;
    }

Domain

Subdomains

Calls

Frequently Asked Questions

What does unescapeCsvFields() do?
unescapeCsvFields() is a function in the netty codebase, defined in common/src/main/java/io/netty/util/internal/StringUtil.java.
Where is unescapeCsvFields() defined?
unescapeCsvFields() is defined in common/src/main/java/io/netty/util/internal/StringUtil.java at line 495.
What does unescapeCsvFields() call?
unescapeCsvFields() calls 1 function(s): length.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free