黑马程序员技术交流社区

标题: 在学习正则表达式中遇到的问题 [打印本页]

作者: 杨康    时间: 2012-7-11 19:26
标题: 在学习正则表达式中遇到的问题
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, 下载次数: 24)

最先打印的是空格?

最先打印的是空格?

作者: 丁二跃    时间: 2012-7-11 19:38
还记得老师字符串视频中 统计子串 吗?

“aabcd".split("aa")  切割出来 一个是 空 一个是 aa
一样的道理
作者: 杨康    时间: 2012-7-11 19:44
丁二跃 发表于 2012-7-11 19:38
还记得老师字符串视频中 统计子串 吗?

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

可是你的字符串头连个字符是aa,而我的字符串头两个字符不是空格,什么原因?
作者: 丁二跃    时间: 2012-7-11 20:02
杨康 发表于 2012-7-11 19:44
可是你的字符串头连个字符是aa,而我的字符串头两个字符不是空格,什么原因? ...

一样的道理啊  " *" 空格* 代表的是0个或多个空格    "abcdefg"   a前面切一下 分成 空 abcdefg …………
作者: 黑马振鹏    时间: 2012-7-11 20:28
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 20:33
String regex = " *";//为什么用空格*切割字符串,结果会先出现空格
在API中是这么定义正则表达式中的 ? * +的
Greedy 数量词
X?     X,一次或一次也没有
X*     X,零次或多次
X+     X,一次或多次
当你开始切割的时候在zhangshan前面会判断一次,结果是没有空格,
满足 " *"(零次或多次)的正则要求,于是就切割了一次
所以才会打打印时出现了线打印一个空格的情况
如果不想打印空格的话,可以改成 " +"。一次或多次
看到正则这里了,出现问题应该要先查询API了,如果API没看懂,再来问,这样更能加深理解




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2