问题描述:
今天帮同门作华为的笔试题,我在自己电脑上调试好的代码上传后会报数组越界的异常,这让我非常的难受,经过认真查找问题的原因发现,我本地用的是JDK1.7,而上传后用的是JDK1.8编译运行,String.split("")在JDK1.7和JDK1.8中切割后是有差别的,具体如下代码所示。
在JDK1.8中,如下所示:
public class String_split {
public static void main(String[] args) {
String str = "abc";
String[] str_split = str.split("");
System.out.println(str_split.length);
System.out.println("==========================");
for (int i = 0; i < str_split.length; i++) {
System.out.println(str_split[i]);
}
}
}
运行结果:
3
==========================
a
b
c
在JDK1.7中,同样的代码,但是结果不同,如下所示:
public class String_split {
public static void main(String[] args) {
String str = "abc";
String[] str_split = str.split("");
System.out.println(str_split.length);
System.out.println("==========================");
for (int i = 0; i < str_split.length; i++) {
System.out.println(str_split[i]);
}
}
}
运行结果:
4
==========================
a
b
c
总结:
字符串经过split("")切割后,在JDK1.7中,切割后的字符串数组的长度会比原始字符串中包含的字符元素的个数多一,并且切割后的字符串数组的第一个元素是null;
字符串经过split("")切割后,在JDK1.8中,切割后的字符串数组的长度和原始字符串中包含的字符元素的个数一样多,并且切割后的字符串数组的第一个元素是原始字符串的第一个字符元素。