黑马程序员技术交流社区

标题: 正则表达式的问题 [打印本页]

作者: 嘎路的米    时间: 2015-6-30 14:17
标题: 正则表达式的问题
如果String str = "abeeesaeeeed";
那么,按照ee切割,规则可以这么写String reges = "(ee)+";(对ee出现一次或者多次进行切割)。
获取的结果是ab,esa,d

但是我的字符串是这样的  String str = "abeeesaqqqqd";
我想按照ee和qq进行切割,(将出现一对对的叠词进行切割。比如:ee,qq)
想得到的结果是ab,esa,d。那么规则该这么写啊?


作者: 孙建强Jason    时间: 2015-6-30 22:15
还没有学到这里,这貌似已经到基础最后的部分了
作者: 守门员    时间: 2015-7-1 08:54
  1.                 String str = "abeeesaqqqqd";
  2.                 //按照叠词完成切割。
  3.                 //可以将规则封装成一个组。用()完成。组的出现都有编号。
  4.                 //从1开始。 想要使用已有的组可以通过  \n(n就是组的编号)的形式来获取。
  5.                 //.表示任意字符,可以根据需要使用其他的,比如\d,\w
  6.                 //下面这个表达式就是将一个任意字符封装成一组,
  7.                 //因为只有一组,所以后面是\1
  8.                 //{1}表示除了前面被封装的字符,这个组又出现一次,
  9.                 //也就是表示这个正则的意思是两个相同的字符
  10.                 String regex = "(.)\\1{1}";
  11.                 String[] arr = str.split(regex);  
  12.                 System.out.println(arr.length);
  13.                 for(String s : arr)
  14.                 {
  15.                         System.out.println(s);
  16.                 }        
复制代码
结果是


因为qqqq按照规则被切两次,所以多出一位空的


作者: 黑马无敌    时间: 2015-7-1 09:40
围观学习
作者: 嘎路的米    时间: 2015-7-1 10:00
守门员 发表于 2015-7-1 08:54
结果是

我已经弄出答案了。你切的不对。我需要的是没有空位的,
正确代码在下面
  1. public class Demo {
  2.         public static void main(String[] args) throws Exception {
  3.                 String str = "abeeesaqqqqd";
  4.                
  5.                 String regex = "((.)\\2)+";
  6.                
  7.                 String[] arr = str.split(regex);
  8.                
  9.                 System.out.println("得到的数组长度为:"+arr.length);
  10.                 for(String s : arr)
  11.                         System.out.println(s);
  12.         }
  13. }
复制代码



作者: 守门员    时间: 2015-7-1 10:09
嘎路的米 发表于 2015-7-1 10:00
我已经弄出答案了。你切的不对。我需要的是没有空位的,
正确代码在下面

你先看清楚,我已经说是按两个相同的切,qqqq是切两回的,你的代码意思是不管几个相同的都只切一下,这样会把前面的abeeesa只切剩ab sa,三个e没了
作者: 嘎路的米    时间: 2015-7-1 11:58
守门员 发表于 2015-7-1 10:09
你先看清楚,我已经说是按两个相同的切,qqqq是切两回的,你的代码意思是不管几个相同的都只切一下,这样 ...

你运行过代码没有:L
我的运行结果是



e不是还在吗- -



作者: 守门员    时间: 2015-7-1 12:09
本帖最后由 守门员 于 2015-7-1 12:16 编辑
嘎路的米 发表于 2015-7-1 11:58
你运行过代码没有
我的运行结果是

不好意思,看错了,以为是组的+,看开始我理解成你只想用两个相同的叠词比如ee和qq截
作者: javazhang    时间: 2015-7-1 12:11
路过,这个还没有学到
作者: dadai5ai    时间: 2015-7-1 12:31
围观,还没有学到。。




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