黑马程序员技术交流社区

标题: 大家正则表达式理解的好吗?问个有关它的问题请看下 [打印本页]

作者: 莞漂族    时间: 2014-6-3 18:56
标题: 大家正则表达式理解的好吗?问个有关它的问题请看下
String str = "192.68.10.254  102.49.23.13  10.10.10.10  2.2.2.2   8.109.90.3";
str = str.replaceAll("(\\d+)","00$1");这句的打印结果:00192.0068.0010.00254  00102.0049.0023.00013 0010.0010.0010.0010  002.002.002.002   008.00109.0090.0030
str = str.replaceAll("("0*(\\d+)","$1");这句打印的结果是: 192.68.10.254  102.49.23.13  10.10.10.102 2.2.2.2  8.109.
二句毕老师在视频上是这么说的:0未出现过多次,数字出现1次或多次,为什么打印的不是192.068.010.254呢?为什么要将非零数字前面的0去掉呢?查jdk文档发现X* ,表示X出现零次或多次, 那么0*就表示0出现零次或多次,0出现多次的情况是当0处于非零数字后面的情况吗?


作者: 呀嘛咕    时间: 2014-6-3 21:54
这是加两个0:
str = str.replaceAll("(\\d+)","00$1");
这是去掉前面的0
str = str.replaceAll("("0*(\\d+)","$1");所以你要要在中间加一个 保留3为数字的替换:
str = str.replaceAll("0*(\\d{3})","$1");
然后在去0


所以是:
str = str.replaceAll("(\\d+)","00$1");
str = str.replaceAll("0*(\\d{3})","$1");
str = str.replaceAll("("0*(\\d+)","$1");

作者: luheqi    时间: 2014-7-1 14:48
str = str.replaceAll("0*(\\d+)","00$1");

        System.out.println(str);
        str = str.replaceAll("0*(\\d{3})","$1");
        System.out.println(str);

        str = str.replaceAll(("0*(\\d+)"), "$1");
作者: luheqi    时间: 2014-7-1 14:49
你们的分号和括号竟然是单数!!!太牛了
作者: luheqi    时间: 2014-7-1 14:51
第三个还可以省略一对括号:str = str.replaceAll("0*(\\d+)", "$1");
作者: 泪雨星空    时间: 2016-4-27 23:00
看不懂,还需努力,加油
作者: ZZT    时间: 2016-4-29 18:05
顶顶顶顶d




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