stringutils.split和string.split的区别
发布网友
发布时间:2022-08-24 18:38
我来回答
共3个回答
热心网友
时间:2024-11-28 23:12
首先我们看StringUtils的split()方法的底层:
public static String[] split(String toSplit, String delimiter) {
if (!hasLength(toSplit) || !hasLength(delimiter)) {
return null;
}
int offset = toSplit.indexOf(delimiter);
if (offset < 0) {
return null;
}
String beforeDelimiter = toSplit.substring(0, offset);
String afterDelimiter = toSplit.substring(offset + delimiter.length());
return new String[] {beforeDelimiter, afterDelimiter};
}
语义上看不难理解,第一个参数是需要分割的字符串,第二个参数即分隔符。
逻辑上走下来,可以发现,这个方法是使用subString()方法,从字符串起始位置到分隔符在字符串中第一次出现的位置截下来,然后在把剩下的的字符串截下来,放进数组返回。
可以看出StringUtils的split()方法是使用subString去截断字符串,并且只截一次
而String的split从使用效果来说就知道,分隔符有多少,就截多少,当然我并没有去看源代码,仅从使用效果来说是这样。
语言功底不好,描述略多,见谅!
热心网友
时间:2024-11-28 23:12
StringUtils.split其实底层调用的也是String.split只是封装了下
热心网友
时间:2024-11-28 23:13
举例:
String[] strs = "".split(",");
String[] strs = ",".split(",");
String[] strs = ",1,".split(",");
三个结果分别是:
strs.length=1,strs[0]=""
strs.length=0
strs.length=2,strs[0]="",strs[1]="1"
这三个的结果在你意料之中吗?String.split使用起来潜规则比较多,即使自己清楚,别人也未必一眼就看明白。为了不引起误会,建议使用StringUtils.split来替代,它对空字符串""会进行过滤。
String[] strs = StringUtils.split(",1,,2,", ",");
结果是strs.length=2,strs[0]="1",strs[1]="2"对比上面的第三个的结果应该有结论了。