Java String Split by Length splitEscapedString(String str, char sep, char esc, int maxPart)

Here you can find the source of splitEscapedString(String str, char sep, char esc, int maxPart)

Description

split Escaped String

License

Apache License

Declaration

public static List<String> splitEscapedString(String str, char sep, char esc, int maxPart) 

Method Source Code

//package com.java2s;
/**/*from ww  w .java  2 s . c  om*/
 * Copyright 2014-2017 Functional Genomics Development Team, European Bioinformatics Institute
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 *
 * @author Mikhail Gostev <gostev@gmail.com>
 **/

import java.util.ArrayList;

import java.util.List;

public class Main {
    public static List<String> splitEscapedString(String str, char sep, char esc, int maxPart) {
        List<String> res = new ArrayList<>();

        if (maxPart == 1) {
            res.add(str);
            return res;
        }

        int ptr = 0;
        int beg = 0;
        int len = str.length();

        while (true) {
            if (beg == len) {
                res.add("");
                break;
            }

            int pos = str.indexOf(sep, ptr);

            if (pos == -1) {
                if (res.size() == 0) {
                    res.add(str);
                } else {
                    res.add(str.substring(beg));
                }

                break;
            }

            int nEcs = 0;
            for (int i = pos - 1; i >= 0; i--) {
                if (str.charAt(i) == esc) {
                    nEcs++;
                } else {
                    break;
                }
            }

            if (nEcs % 2 == 0) // even number of escapes
            {
                res.add(str.substring(beg, pos));

                if (maxPart > 0 && res.size() == maxPart - 1) {
                    res.add(pos + 1 < len ? str.substring(pos + 1) : "");
                    break;
                }

                beg = pos + 1;
            }

            ptr = pos + 1;

        }

        return res;
    }
}

Related

  1. splitByteArray(byte[] inByteArray, int length)
  2. splitByteArray(final byte[] data, final int packetLength)
  3. splitByTrimmedDelimiterNonNestedInBracketsOrQuotesOrComments(final String s, final char delimiter, final char quoteChar, char bracketChar, final boolean includeIntermediaryEmptyElmts, final int maxElmts, String cmtStart, String cmtEnd)
  4. splitByWholeSeparatorWorker(final String str, final String separator, final int max, final boolean preserveAllTokens)
  5. splitEqually(String _text, int _len)
  6. splitFilenames(String text)
  7. splitHtmlString(String stringToSplit, int maxLength)
  8. splitIntoFrames(String src, int maxFrameSize)
  9. splitIntoLine(String input, int maxCharInLine)