黑马程序员技术交流社区
标题:
关于正则表达式星号*的问题?
[打印本页]
作者:
never615
时间:
2014-6-11 13:51
标题:
关于正则表达式星号*的问题?
本帖最后由 never615 于 2014-6-11 16:59 编辑
X
*
X
,零次或多次
在ip排序这个练习里面 192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30
10前面补零留三位之后是010 然后用正则去零, replaceAll("0*(\\d+)","$1") 0*表示0次或者多次啊, 010中 开头的0出现了一次啊,按理说不适用这个规则啊,怎么回事? 毕老师视频里面 说了192前面没零的情况,说了002前面两个零的情况,就是没有提010,前面只有一个零时。。郁闷啊 又想不通了,应该怎么想?还有看看下面代码里面我注释的部分
*/
public static void test_2()
{
String str="192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30";
str=str.replaceAll("(\\d+)","00$1");
str=str.replaceAll("0+(\\d{3})","$1"); //这块老师写的("0*(\\d{3})","$1"); 但是我想0010,后面保留三位,前面就剩下一个0了,不符合,0*啊,就写了0+
sop(str);
String[] arr=str.split(" ");
TreeSet<String> ts=new TreeSet<String>();
for(String s:arr)
{
ts.add(s);
}
for(String s:ts)
{
sop(s.replaceAll("0*(\\d+)","$1")); //这块写0+的话,打印结果变成了下面的第二种结果
}
}
复制代码
正确的打印结果
2.2.2.28.109.90.30
10.10.10.10
102.49.23.13
192.68.1.254
第二结果:
2.2.2.2
8.19.90.30
10.10.10.10
12.49.23.13
192.68.1.254
作者:
Gaara33
时间:
2014-6-11 14:02
0*的意思就是说0出现0次或多次(注意:这个多次也可以是一次),你用0+的话就是一次或多次,那么就是最少一次,遇到102,109不久挂了
作者:
never615
时间:
2014-6-11 14:09
Gaara33 发表于 2014-6-11 14:02
0*的意思就是说0出现0次或多次(注意:这个多次也可以是一次),你用0+的话就是一次或多次,那么就是最少一 ...
好吧 多次包括一次的话就明白了
X+ X,一次或多次 这样写的我还以为一次和多次是两回事了。。。。应该写X+ X,多次。。。
作者:
紫幻随影-缪
时间:
2014-6-11 14:34
拿202来说,
如果是用0*(表示0次或多次),则在遇到2时就满足条件(即数字前没有0),将202输出;
如果是用0+(表示1次或多次),则在遇到2时没有满足条件,接着遇到0满足条件,并且0后是没有零了,就输出22,对于第二种情况可以通过加单词边界解决,如sop(s.replaceAll("\\b0+(\\d+)\\b","$1"));
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2