import java.util.regex.*;
class Regex2 {
public static void main(String[] args) {
Pattern p = Pattern.compile(args[0]);
Matcher m = p.matcher(args[1]);
boolean b = false;
while(b = m.find()) {
System.out.print(m.start() + m.group());
}
}
}
And the command line:
java Regex2 "\d*" ab34ef输出结果为:01234456为什么
class Regex2 {
public static void main(String[] args) {
Pattern p = Pattern.compile(args[0]);
Matcher m = p.matcher(args[1]);
boolean b = false;
while(b = m.find()) {
System.out.print(m.start() + m.group());
}
}
}
And the command line:
java Regex2 "\d*" ab34ef输出结果为:01234456为什么
解决方案 »
- static Object o1 = new Object()
- 小小疑惑,求各位帮帮忙!
- 请教:线程问题
- 快速排序如何实现?
- 为什么不行呢?静态变量的使用问题!
- 请高手帮我解决一下JFielChooser的错误 送分哦!!!
- 在Java怎么实现在程序的开始时,得到当前时间,然后在程序执行完时,再次得到当前时间,利用此次时间减去开始时间得到程序执行时间,怎么
- 有南京的朋友吗?进来把你伊妹妹留下。
- java.net.UnknownHostException: java.sun.com
- 我是java的初学者,请问final、static关键字的作用是什么?能否举个例子?
- 关于客户端给服务端传参数问题~
- JAVA源码阅读问题
在你的输入参数中,"\d*" 应该是"\\d*"
System.out.print(m.start() + m.group());
修改成
System.out.println(m.start() +"-"+m.group()+"-");
就好像可以看出其原因了。
修改之后的输出变成了:
0--
1--
2-34-
4--
5--
6--
我们一行一行解释吧:
\d*表示什么意思呢?表示不含或者含有不确定个数的数字。
第1个输出0,表示输入串中的第1个字符位置,没有数字,故输出位置0;
第2个输出1,表示输入串中的第2个字符位置,没有数字,故输出位置1;
第3个输出234,表示输入串中的第3个字符位置,有数字,且跟随1个数字,故输出位置2,以及两位数字34即234;
第4个输出4,表示输入串中的第5个字符位置,没数字,故输出位置4;
第5个输出5,表示输入串中的第6个字符位置,没数字,故输出位置5;
哈哈,最后一个我也不知道解释了。按楼主的意思,好像应该将第一个输入改成"\d+"
find会在整个输入中寻找是否有匹配的子字符串,如果只为真,才会有start end 之类的方法
楼主的group是默认的group(0)的形式,满足外大括号条件分为一组。才会有34同时输出。
最后一个我也不知道解释了,不知道哪位高人指点一下。关注中。。