Java 拆分字符串但保留第一个分隔符

Java 拆分字符串但保留第一个分隔符,java,regex,Java,Regex,我有一个字符串,格式为“/a/B/C/D”。是否有正则表达式或简单的方法将其捕获到[/a,B,C,D]格式的字符串数组中?基本上,在“/”上拆分,但保留分隔符的第一个实例?我可以保证输入字符串的第一个字符是“/”,第一个字符后面至少有一个“/”。到目前为止,我的尝试是: private String[] customSplit(String input) { if (!input.startsWith("/")) { input = "/" + input; }

我有一个字符串,格式为
“/a/B/C/D”
。是否有正则表达式或简单的方法将其捕获到
[/a,B,C,D]
格式的字符串数组中?基本上,在“/”上拆分,但保留分隔符的第一个实例?我可以保证输入字符串的第一个字符是“/”,第一个字符后面至少有一个“/”。到目前为止,我的尝试是:

private String[] customSplit(String input) {
    if (!input.startsWith("/")) {
        input = "/" + input;
    }

    String[] output = input.split("/");
    output[1] = "/" + output[1];
    return output;
}

但是上面的内容有点笨拙(索引0处有一个空的“”点),所以有什么建议吗?

一个肮脏的解决方案……但至少应该有效。 它假设字符串中至少有2个元素,否则必须添加一些错误处理代码,但从您编写的代码来看,应该始终是这样

private String[] customSplit(String input) {
    String preparedInput=input;
    if (input.startsWith("/")) {
        preparedInput=input.substring(1);
    }

    String[] output = preparedInput.split("/");
    output[0] = "/" + output[0];
    return output;
}

您可以在拆分中使用负前瞻,以避免在第一个分隔符上拆分:

String[] toks = "/A/B/C/D".split("(?!^)/");
//=> [/A, B, C, D]
这里的
(?!^)
是一个负前瞻,它将跳过分隔符
/
的起始位置

另一种方法是:

private String[] customSplit(String input) {
    String[] output = input.substring(1).split("/");
    output[0] = "/" + output[0];
    return output;
}

该方案需要考虑任何边缘情况吗?