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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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处于非零数字后面的情况吗?

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

8 个回复

倒序浏览
这是加两个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");

点评

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+)")  发表于 2014-7-1 14:46
瞎搞,除了第一个表达式,其他都错了  发表于 2014-7-1 14:41

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
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");
回复 使用道具 举报
你们的分号和括号竟然是单数!!!太牛了
回复 使用道具 举报
第三个还可以省略一对括号:str = str.replaceAll("0*(\\d+)", "$1");
回复 使用道具 举报
看不懂,还需努力,加油
回复 使用道具 举报
ZZT 中级黑马 2016-4-29 18:05:02
7#
顶顶顶顶d
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马