Java中正则Matcher类的matches()、lookAt()和find()的区别

在Matcher类中有matches、lookingAt和find都是匹配目标的方法,但容易混淆,整理它们的区别如下:

  • matches:整个匹配,只有整个字符序列完全匹配成功,才返回True,否则返回False。但如果前部分匹配成功,将移动下次匹配的位置。
  • lookingAt:部分匹配,总是从第一个字符进行匹配,匹配成功了不再继续匹配,匹配失败了,也不继续匹配。
  • find:部分匹配,从当前位置开始匹配,找到一个匹配的子串,将移动下次匹配的位置。
  • reset:给当前的Matcher对象配上个新的目标,目标是就该方法的参数;如果不给参数,reset会把Matcher设到当前字符串的开始处。

使用示例代码来展示他们的区别更清晰明了:

package net.oseye;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class IOTest {
	public static void main(String[] args){
		Pattern pattern = Pattern.compile("\\d{3,5}");
		String charSequence = "123-34345-234-00";
		Matcher matcher = pattern.matcher(charSequence);

		//虽然匹配失败,但由于charSequence里面的"123"和pattern是匹配的,所以下次的匹配从位置4开始
		print(matcher.matches());
		//测试匹配位置
		matcher.find();
		print(matcher.start());

		//使用reset方法重置匹配位置
		matcher.reset();

		//第一次find匹配以及匹配的目标和匹配的起始位置
		print(matcher.find());
		print(matcher.group()+" - "+matcher.start());
		//第二次find匹配以及匹配的目标和匹配的起始位置
		print(matcher.find());
		print(matcher.group()+" - "+matcher.start());

		//第一次lookingAt匹配以及匹配的目标和匹配的起始位置
		print(matcher.lookingAt());
		print(matcher.group()+" - "+matcher.start());

		//第二次lookingAt匹配以及匹配的目标和匹配的起始位置
		print(matcher.lookingAt());
		print(matcher.group()+" - "+matcher.start());
	}
	public static void print(Object o){
		System.out.println(o);
	}
}

输出结果:

false
4
true
123 - 0
true
34345 - 4
true
123 - 0
true
123 - 0
时间: 2024-10-01 12:01:49

Java中正则Matcher类的matches()、lookAt()和find()的区别的相关文章

Java中正则Matcher类的matches()、lookAt()和find()的差别

參考博文地址:http://www.oseye.net/user/kevin/blog/170 1.matcher():仅仅有在整个字符串全然匹配才返回true,否则返回false. 可是假设部分匹配成功.匹配的位置将移动到下次匹配的位置 2.lookingAt():总是从第一个字符開始匹配.不管匹配成功与否,都不会再继续向下匹配 3.find():部分匹配,假设匹配成功.返回true,匹配的位置移动到下次匹配的位置. package com.qunar.fresh.junweiyu.Test;

java中利用继承类和Runnable接口实现多线程的区别

利用继承Thread类实现的多线程无法资源共享 如下程序 class MyThread extends Thread{ public MyThread(String name){ super(); this.name=name; } public void run(){ while(tickets==0?false:true) { tickets--; System.out.println(name+" just selt one ticket,only "+tickets+"

java中的File类

File类 java中的File类其实和文件并没有多大关系,它更像一个对文件路径描述的类.它即可以代表某个路径下的特定文件,也可以用来表示该路径的下的所有文件,所以我们不要被它的表象所迷惑.对文件的真正操作,还得需要I/O流的实现. 1.目录列表 如果我们想查看某个目录下有那些文件和目录,我们可以使用File中提供的list方式来查看,这很像linux下的ls命令. 查看E:/html文件夹下所有的php文件,执行的时候输入的参数为正则表达式 1 package com.dy.xidian; 2

java中的 FileWriter类 和 FileReader类

java中的 FileWriter类 和 FileReader类的一些基本用法 1,FileWriter类(字符输出流类) 构造方法:FileWriter fw = new FileWriter(String fileName);//创建字符输出流类对象和已存在的文件相关联.文件不存在的话,并创建. 如:FileWriter fw = new FileWriter("C:\\demo.txt"); FileWriter fw = new FileWriter(String fileNa

使用myeclipse开发java,解决java中继承JFrame类出现The type JFrame is not accessible due to restriction的问题

在java中创建窗体,导入了java中的JFrame类,之后会出现错误: Access restriction: The type QName is not accessible due to restriction on required library D:\myeclipse professer2014 可以解决的办法为: Project—>Properties—>选中Java Build Path—>选择Libraries,出现下面界面: 选中窗口中原有的JRE库,点击Remov

Java中的嵌套类和内部类

以前看<Java编程思想>的时候,看到过嵌套类跟内部类的区别,不过后来就把它们的概念给忘了吧.昨天在看<数据结构与算法分析(Java语言版)>的时候,又遇到了这个概念,当时就很大的疑惑:嵌套类跟内部类有什么区别?只有是否有关键字static的区别吗? 所以今天找了个时间查了一下两者的详细区别,总结在这篇博客中,既方便自己的复习和学习,也启示他人吧. 1,概念: 定义在一个类内部的类,叫作"嵌套类".嵌套类分为两种:static的和非static的.后者又有一个专

java 中的String类

String a = "aaa"; 用这种方式的时候java首先在内存中寻找"aaa"字符串,如果有,就把aaa的地址给它 如果没有则创建 String a = new String("aaa"); 是不管内存中有没有"aaa" 都开辟一块新内存保存它 可以用以下方法验证下 String a = "aaa"; String b = "aaa"; String c = new String

Java中的Object类

关于Object类的equals()方法的特点: 1) 自反性:对于非空引用x来说,x.equals(x)一定返回true: 2) 对称性:对于非空引用x和y来说,如果x.equals(y)返回true,那么y.equals(x)一定返回true: 3) 传递性:对于非空引用x.y和z来说,如果x.equals(y)返回true,并且y.equals(z)返回true,那么x.equals(z)一定返回true: 4) 一致性:对于非空引用x和y来说,如果x.equals(y)返回true,那么

【Java】Java中的Collections类——Java中升级版的数据结构【转】

一般来说课本上的数据结构包括数组.单链表.堆栈.树.图.我这里所指的数据结构,是一个怎么表示一个对象的问题,有时候,单单一个变量声明不堪大用,比如int,String,double甚至一维数组.二维数组无法完全表达你要表达的东西,而定义一个类Class有太过麻烦,这时候,你可以考虑一下用Java中的Collections类.使用Collections类,必须在文件头声明import java.util.*;   一.动态.有序.可变大小的一维数组Vector与ArrayList Collecti