Here you can find the source of splitEscapedString(String str, char sep, char esc, int maxPart)
public static List<String> splitEscapedString(String str, char sep, char esc, int maxPart)
//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; } }