java Split函数

之前有使用过split函数,但是对这个函数并没有很深入的了解。昨天遇到一个坑,问题 如下:

<span style="font-family:Microsoft YaHei;font-size:18px;">int i = "s\\\\|s\\".split("\\\\|s").length;

i = ?</span>
看到这里有点蒙,不知从何下手,这才通过编译器得出答案。但是还是不理解,基础不行就是这样,做什么事都很吃力。

接下来就研究一下它的用法。

print函数:

public static void print(String[] str_array){
		System.out.println("str_array size:" + str_array.length);
		for(String str : str_array){
			System.out.println(str + " : " + str.length());
		}
	}


1、平时简单的用法

String str1 = "1,2,3,4,5";
String[] str_array = str1.split(",");
print(str_array);

这个模式很容易就可以看懂,平时就是这么用的,答案是:


2、稍微有点不同

String str2 = ",1,2,3,4,5,";
String[] str_array = str2.split(",");
print(str_array);


还是用逗号“,”进行分割,答案是:



好了,问题来了,第一个个逗号“,”前面不是什么都没有吗,为什么前面会有分割出一个String对象出来?没错,split函数就是这样子的功能,将对应分隔符将字符串进行分割,那么在前面位置被分割为“”和“1,2,3,4,5,”,分割为两部分。即最前面的str_array[0] = "";一个长度为0的字符串。如果是这样,按照我的说法,那么上面有6个逗号,应该最后被分割为7个字符串才对,那为什么答案只有6个?但是,测试了多个字符串,发现字符串数组值只保存了到最后一个length不等于0的下标,后面那些长度为0的“”都被遗弃掉了。这个原理我也不知道为什么。在没有找到真相之前就姑且先这样记着吧。

有一个比较好记忆的方法,就是将每一个分隔符都看成我们的回车键,按下每个回车键就可以得到生成的数组的大小了。

如字符串:,1,2,3,,,4,5,得出的长度为8



3、看一下我们最初的问题

<span style="font-size:18px;">String str3 = "s\\\\|s\\";
str_array = str3.split("\\\\|s");
print(str_array);</span>

发现了一个混淆的问题,就是我们使用split函数时,“|”表示or的意思,但是当想把“|”作为分隔符时,要使用转义字符“\”,那么“\\\\|s”是“\\”or"s"还是“\\\\|s”连成一体呢?找了资料发现,在字符串中如果想要表示单单的字符“\”而不是表示转义字符时,是写成“\\”表示反斜杠“\”。由于“\”不仅是java中的特殊字符,也是正则中的特殊字符,所以要双重转义“\\\\”,所以就得到了原来spllit()中的意思是,分隔符“\”或者"s",这样就明白了许多了。


表示网上的文章质量都很一般,大多雷同,都没有讲到这个问题,找了好久都没有想要的答案,在写到这篇文章的最后,终于在知乎上发现别人解释和我验证的差不多,才验证了自己发现的问题的准确性:

学习的点:

1、字符串和split中转义符的使用

2、分割后的字符串数组中会存在长度为0的字符串

3、返回的数组后面长度为0的字符串都会被抛弃

附上知乎上的连接点击打开链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值