[Java]_[0基础]_[String的split里的坑]


场景:

1. 有时候须要使用某些字符来作为值的合并存储。比方以@作为分隔符, 232332@232323@323232, 用一个属性存储这3个值, 用的时候再拿出来split就能够了.

2. 问题是有时候某个值会缺失,比方第一个值没有的情况, @232323@323232  第2,3个值没有的情况 232332@@ ,当然也期望是能返回3个值,仅仅是后边2个值为空字符即可了。

其实,结果不是这样,即使 2,3个值没有的情况 232332@@  也仅仅返回第1个值。数组大小是1. 这就让人非常迷惑。明明有分隔符,为什么当看不到呢?所以再编程时要注意.

split是惰性搜索, 后边假设没有值存在就当没有结果,可是假设仅仅有第3个值,确实能返回数组大小是3的。前两个是空字符串. 也就是split遵循一个原则。返回结果和数组所在

索引一定是相应着的最少数组.

3. Java的这样的做法会令写手写C++ split的人抓狂, 做C++切换Java时要注意.

4. 也就是说String的split 即使指定了分隔符个数也不能得到固定的切割个数.


情况1.

String value = "\n\n2";
		String[] names = value.split("\n");
		for (int i = 0; i < names.length; i++) {
			System.out.println("i:"+names[i]);
		}

输出:

i:
i:
i:2

情况2.

String value = "2\n\n";
		String[] names = value.split("\n");
		for (int i = 0; i < names.length; i++) {
			System.out.println("i:"+names[i]);
		}

输出:

i:2


情况3:

String value = "\n\n";
		String[] names = value.split("\n");
		for (int i = 0; i < names.length; i++) {
			System.out.println("i:"+names[i]);
		}

输出: 无输出,个数是0.

參考:

http://tjuking.iteye.com/blog/1507855


纠正: 20150715

经过一个同事的纠正,split另一个重载的方法能够做到最大切割数, 就是设置split的第2个參数为-1,假设有两个分隔符的情况下,最大切割数是3.

String value = "2\n5\n";
String[] names = value.split("\n",-1);
for (int i = 0; i < names.length; i++) {
	System.out.println("i:"+names[i]);
}

输出:

i:2
i:5
i:






转载于:https://www.cnblogs.com/jzdwajue/p/7095052.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值