Java split分割空字符串得到的数组长度为1
原因
举个例子:
String str = ""; //一个空字符串
String[] arr = str.split(","); //比如要用逗号分割,这个用什么分割结果都一样
System.out.println(arr[0]); //可以获取到第一个元素,是一个空字符串""
System.out.println(arr.length); //长度为1
大家可以自己试一下
这样就导致空字符串
的时候得到的长度为1
,比如字符串是"gjhj625"
的时候的长度也为1
,这样在做一些逻辑判断的时候就可能会出错。我今天在写动态mapper的时候就被这个搞了一点时间
解决方法
如果我们想判断分割的结果大于0时是一个具体的字符串而不是一个空字符串,这个时候我们就要做一些处理
方法一
直接在分割之前就判断字符串是否为空,
String str = "";
if (str.isEmpty()) {
arr = new String[]{};
...
} else {
arr = str.split(",");
...
}
方法二
删除空字符串,再获取长度
String str = "";
String[] arr = str.split(",");
//最好在代码需要用到List的时候才用这种
List<String> list = Arrays.asList(arr);
list = new ArrayList<>(list);
list.remove("");
结尾
如果有看懂split源码的大佬,知道为什么会这样,请指点一下我,嘿嘿嘿