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;
}
该方案需要考虑任何边缘情况吗?