java的String.split()方法

首先抛出问题,代码如下

int index = 1;
String string = "11111,";
String[] strings = string.split(",");
System.out.println(strings[index]);

当时大概的逻辑是字符串根据“,”劈开,获取index位置的字符串,信心满满的run起来之后

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
	at com.xuwei.user.wrapper.Test.main(Test.java:15)

数组越界?不应该返回长度为2的数组么?然后果断开始测试模式

System.out.println("测试1");
        String str = ",,,,,,";
        String[] strs = str.split(",");
        System.out.println("string:"+str);
        System.out.println("length:"+strs.length);
        System.out.println("result:"+ JSON.toJSONString(strs));

        System.out.println("\n测试2");
        String str2 = ", , , , , ,";
        String[] strs2 = str2.split(",");
        System.out.println("string:"+str2);
        System.out.println("length:"+strs2.length);
        System.out.println("result:"+ JSON.toJSONString(strs2));

        System.out.println("\n测试3");
        String str3 = "1,2,3,4,5,6,7";
        String[] strs3 = str3.split(",");
        System.out.println("string:"+str3);
        System.out.println("length:"+strs3.length);
        System.out.println("result:"+ JSON.toJSONString(strs3));

        System.out.println("\n测试4");
        String str4 = "1,2,3,4,5,,";
        String[] strs4 = str4.split(",");
        System.out.println("string:"+str4);
        System.out.println("length:"+strs4.length);
        System.out.println("result:"+ JSON.toJSONString(strs4));


        System.out.println("\n测试5");
        String str5 = ",,,1,2,3,4,5";
        String[] strs5 = str5.split(",");
        System.out.println("string:"+str5);
        System.out.println("length:"+strs5.length);
        System.out.println("result:"+ JSON.toJSONString(strs5));

        System.out.println("\n测试6");
        String str6 = "1,2,,,3,,,4,5,,";
        String[] strs6 = str6.split(",");
        System.out.println("string:"+str6);
        System.out.println("length:"+strs6.length);
        System.out.println("result:"+ JSON.toJSONString(strs6));

获取结果

测试1
string:,,,,,,
length:0
result:[]

测试2
string:, , , , , ,
length:6
result:[""," "," "," "," "," "]

测试3
string:1,2,3,4,5,6,7
length:7
result:["1","2","3","4","5","6","7"]

测试4
string:1,2,3,4,5,,
length:5
result:["1","2","3","4","5"]

测试5
string:,,,1,2,3,4,5
length:8
result:["","","","1","2","3","4","5"]

测试6
string:1,2,,,3,,,4,5,,
length:9
result:["1","2","","","3","","","4","5"]

可以看出,在头部(左侧)、中间的,,之类内容会被截取出来,但是在尾部(右侧)的””全被丢弃了。

调整测试代码

System.out.println("测试1");
        String str = ",,,,,,";
        String[] strs = str.split(",");
        System.out.println("string:"+str);
        System.out.println("length:"+strs.length);
        System.out.println("result:"+ JSON.toJSONString(strs));
        strs = str.split(",", -1);
        System.out.println("length:"+strs.length);
        System.out.println("result:"+ JSON.toJSONString(strs));

输出结果

测试1
string:,,,,,,
length:0
result:[]
length:7
result:["","","","","","",""]

总结一下,正常的String.split()方法会抛弃尾部的空值,如果需要保持数组完整,可以采用String.split(“”,-1)方法

请登录后发表评论

    没有回复内容