import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String [] args){
Pattern p = Pattern.compile("\\d*");
Matcher m = p.matcher("ab34ef");
while(m.find()){
System.out.println(m.start()+":"+m.group());
}
}
}
输出的结果:
0:
1:
2:34
4:
5:
6:各位大侠,ab34ef 最大的下标只是到 5 啊? 为什么会有6出现呢?
谢谢各位!
解决方案 »
- Java 环境变量 怎么设都不对
- java 性能问题
- 初学者问一个简单的问题。Java VM 跟 J2SE 1.4.2 SDK 有什么不一样。
- !!!再问个有关写文件的小问题。
- 数据库BLOB相关
- 为什么我的文本框不能写入字符
- 我想从delphi转向java,请各位说一下您所知道的好书籍,好学习网址,好论坛等!十分感谢!
- JBuilder5 的在线注册方法!!!!(献给没有注册机的Java爱好者)
- 请教注册表问题
- SUN said:C++将要在两年内被JAVA取代,真的吗?
- 在JSP网页上如何通过点击浏览文件的按钮,只是显示文件扩展名为xsl或者csv的文件扩展名?
- 如何分离字符串,machine1#global#20090112 超级-超级 简单的问题??
相当于 str.substring(0,1);//这里0也就是你的m.start()的值
因为a不能符合,所以匹配0宽度的字符。
继续想后str.substring(1,2);
b也不符合。
匹配指示器继续下移。
str.substring(2,3);
这时候取出3,是符合的。
但由于有*,所以向后,4也匹配,
其实这时候m.end()移动到4的后面
也就相当于str.substring(2,4);
所以输出2:34然后匹配指示器下移,
str.substring(4,5);
是e,所以匹配0宽度的字符。str.substring(5,6);
是f,所以匹配0宽度字符。然后匹配指示器继续下移,
m.start()在6的位置,
由于没有别的字符,所以还是匹配0宽度字符。以上是我理解的,希望没有误导你!