A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨康 中级黑马   /  2012-7-11 19:26  /  2024 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class RegexDemo
{
     public static void main(String[] args)
     {
          splitDemo();
     }
     public static void splitDemo()
    {
               String str = "zhangsan lisi wangwu zhaoliu";
               String regex = " *";//为什么用空格*切割字符串,结果会先出现空格
                String[] arr = str.split(regex);
               for(String s : arr)
               {
                           System.out.println(s);
               }
       }
}
结果如下图所示

111.jpg (6 KB, 下载次数: 29)

最先打印的是空格?

最先打印的是空格?

5 个回复

正序浏览
String regex = " *";//为什么用空格*切割字符串,结果会先出现空格
在API中是这么定义正则表达式中的 ? * +的
Greedy 数量词
X?     X,一次或一次也没有
X*     X,零次或多次
X+     X,一次或多次
当你开始切割的时候在zhangshan前面会判断一次,结果是没有空格,
满足 " *"(零次或多次)的正则要求,于是就切割了一次
所以才会打打印时出现了线打印一个空格的情况
如果不想打印空格的话,可以改成 " +"。一次或多次
看到正则这里了,出现问题应该要先查询API了,如果API没看懂,再来问,这样更能加深理解
回复 使用道具 举报
class RegexDemo
{
     public static void main(String[] args)
     {
          splitDemo();
     }
     public static void splitDemo()
    {
               String str = "a b c d";//简化一下字符串
               String regex = " *";//为什么用空格*切割字符串,结果会先出现空格
                String[] arr = str.split(regex);
                        System.out.println(arr.length);
               for(String s : arr)
               {
                           System.out.println(s);
               }
       }
}

打印结果:
8

z

l

w

z
回复 使用道具 举报
杨康 发表于 2012-7-11 19:44
可是你的字符串头连个字符是aa,而我的字符串头两个字符不是空格,什么原因? ...

一样的道理啊  " *" 空格* 代表的是0个或多个空格    "abcdefg"   a前面切一下 分成 空 abcdefg …………
回复 使用道具 举报
丁二跃 发表于 2012-7-11 19:38
还记得老师字符串视频中 统计子串 吗?

“aabcd".split("aa")  切割出来 一个是 空 一个是 aa

可是你的字符串头连个字符是aa,而我的字符串头两个字符不是空格,什么原因?
回复 使用道具 举报
还记得老师字符串视频中 统计子串 吗?

“aabcd".split("aa")  切割出来 一个是 空 一个是 aa
一样的道理
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马