Java 字符串拆分&;参加

Java 字符串拆分&;参加,java,Java,我有一组字符串。我需要能够将此集合中的项目加入到一个字符串中,然后向后拆分该字符串并获得原始字符串集合。 当然,我需要为联接/拆分操作引入一个分隔符。鉴于原始字符串可以包含任何字符,我还需要处理分隔符转义。我的问题很简单——是否有一个Java类/库可以为我提供开箱即用的功能?比如: String join(String[] source, String delimiter, String escape); String[] split(String source, String delimite

我有一组字符串。我需要能够将此集合中的项目加入到一个字符串中,然后向后拆分该字符串并获得原始字符串集合。 当然,我需要为联接/拆分操作引入一个分隔符。鉴于原始字符串可以包含任何字符,我还需要处理分隔符转义。我的问题很简单——是否有一个Java类/库可以为我提供开箱即用的功能?比如:

String join(String[] source, String delimiter, String escape);
String[] split(String source, String delimiter, String escape);

或类似情况,无需手动操作?

无需脱离部件,有:

  • StringUtils.split(..)
    StringUtils.join(..)
    from
  • Joiner
    Splitter
    来自

拆分:
String.split
将regex模式作为参数(delimeter),并返回
字符串[]
作为结果。

拆分和联接转义分隔符:

@NonNull
public static String joinEscaping(char separator, String... aa) {
    String escape = separator != '\\' ? "\\" : "#"; 

    StringBuilder result = new StringBuilder();

    for (int i = 0; i < aa.length; i++) {
        String a = aa[i];
        a = (a == null) ? "" : a;
        a = a.replace(escape, escape + escape);
        a = a.replace(separator + "", escape + separator);

        result.append(a);
        if (i + 1 < aa.length) {
            result.append(separator);
        }
    }
    return result.toString();
}


public static List<String> splitUnescaping(char separator, @NonNull String str) {
    char escape = separator != '\\' ? '\\' : '#';
    List<String> result = new ArrayList<>();

    int yourAreHere = 0;
    boolean newPart = true;

    while (true) {
        int sep = str.indexOf(separator, yourAreHere);
        int exc = str.indexOf(escape, yourAreHere);
        if (sep == -1 && exc == -1) { // last part
            add(result, str.substring(yourAreHere), newPart);
            break;
        }
        if (sep == -1 && exc + 1 == str.length()) { // ghost escape
            add(result, str.substring(yourAreHere, exc), newPart);
            break;
        }
        if (exc == -1 || (sep != -1 && sep < exc)) {
            add(result, str.substring(yourAreHere, sep), newPart);
            yourAreHere = sep + 1;
            newPart = true;
        } else {
            char next = str.charAt(exc + 1);
            add(result, str.substring(yourAreHere, exc) + next, newPart);
            yourAreHere = exc + 2;
            newPart = false;
        }
    }

    return result;
}


private static void add(List<String> result, String part, boolean newPart) {
    if (newPart) {
        result.add(part);
    } else {
        int last = result.size() - 1;
        result.set(last, result.get(last) + part);
    }
}
@NonNull
公共静态字符串joinEscaping(字符分隔符、字符串…aa){
字符串转义=分隔符!='\\'?“\\\”:“\\”;
StringBuilder结果=新建StringBuilder();
对于(int i=0;i
展示您尝试过的东西。顺便说一句,join和split总是有可能您的
是输入字符串中的一个(或部分)。好吧,到目前为止建议的解决方案都不支持转义。好吧,我很好奇。你为什么要把一根绳子连起来,然后把它分开?听起来你还需要别的东西!