用split()分隔字符串,得到的字符串数组第一个为什么是空白的

yapai 2011-08-11 03:35:00

import java.util.*;
public class RegexTest {
public static void main(String[] args) {
String str = "son cat java moon hahaha mmmm";
String[] dataArr = str.split(".on\\s*");
System.out.println(dataArr.length);
for (int i = 0; i < dataArr.length; i++) {
System.out.println(dataArr[i]);
}
}
}

代码如上,打印出来的效果如下:

cat java m
hahaha mmmm

为什么第一行是空白的呢?
...全文
1183 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yapai 2011-08-11
  • 打赏
  • 举报
回复
我知道了,只有判断长度就好了,谢谢大家的指教
yapai 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 qybao 的回复:]

引用 9 楼 yapai 的回复:
不是很明白你的说法。。可以再讲讲吗?


String s = "a,b";
如果a是空白,就变成 ",b", 如果b是空白,就变成"a,",如果ab都是空白就变成","
不管什么情况,以","分割为例,因为分隔符存在,所以都会以分隔符为界把s分割,所以首先可以初步估计得到一个数组有2个元素,只是元素是不是空白而已,然而有个特殊情况,就是b是空白的……
[/Quote]
我明白了,谢谢。那我怎样去掉这个空白的子串呢?
qybao 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yapai 的回复:]
不是很明白你的说法。。可以再讲讲吗?
[/Quote]

String s = "a,b";
如果a是空白,就变成 ",b", 如果b是空白,就变成"a,",如果ab都是空白就变成","
不管什么情况,以","分割为例,因为分隔符存在,所以都会以分隔符为界把s分割,所以首先可以初步估计得到一个数组有2个元素,只是元素是不是空白而已,然而有个特殊情况,就是b是空白的时候,分割时只有获得分隔符前半部的信息,后半部被忽略,即当b为空白的时候,得到的数组只有一个元素a,b被舍弃了,这就是要注意的地方
yapai 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qybao 的回复:]

引用楼主 yapai 的回复:
Java code


import java.util.*;
public class RegexTest {
public static void main(String[] args) {
String str = "son cat java moon hahaha mmmm";
String[] dataArr = str.split(".……
[/Quote]

不是很明白你的说法。。可以再讲讲吗?
飞跃颠峰 2011-08-11
  • 打赏
  • 举报
回复
split的时候,相邻的分割符之间、分割符与左边起始位置或右边终点位置之间都算有空白字符串被分隔了
这就是split执行的机制
qybao 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 yapai 的回复:]
Java code


import java.util.*;
public class RegexTest {
public static void main(String[] args) {
String str = "son cat java moon hahaha mmmm";
String[] dataArr = str.split(".on……
[/Quote]
split方法分割的时候空白也算
比如
String s = "a,b";
那么 String[] sa = s.split(","); //不管a或b是不是空白,都会分割
不过如果a是空白,分割的数组前一个是空白,但是b是空白,就不存在第二个元素,这个要注意
yapai 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 magong 的回复:]

因为son和你的正则匹配上了啊,
son前面算一个子串了。
[/Quote]
son前面怎么算一个子串?"s"是这个字符串的第一个字符啊。
正在学习java,所以很多不太懂,谢谢
softroad 2011-08-11
  • 打赏
  • 举报
回复
哈哈,炒java
magong 2011-08-11
  • 打赏
  • 举报
回复
这样不好,大家一起上,把Java炒起来。
zl3450341 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 magong 的回复:]

因为son和你的正则匹配上了啊,
son前面算一个子串了。
[/Quote]

马工这个月抢分好疯狂啊。。我等低调路过
magong 2011-08-11
  • 打赏
  • 举报
回复
因为son和你的正则匹配上了啊,
son前面算一个子串了。
softroad 2011-08-11
  • 打赏
  • 举报
回复
你用一个字符和on分割,结果有空格,这么了?

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧