在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

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

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

    在Matcher类中有matches.lookingAt和find都是匹配目标的方法,但容易混淆,整理它们的区别如下: matches:整个匹配,只有整个字符序列完全匹配成功,才返回True,否则返回 ...

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

    參考博文地址:http://www.oseye.net/user/kevin/blog/170 1.matcher():仅仅有在整个字符串全然匹配才返回true,否则返回false. 可是假设部分匹配 ...

  3. Java字符串的匹配问题,String类的matches方法与Matcher类的matches方法的使用比较,Matcher类的matches()、find()和lookingAt()方法的使用比较

    参考网上相关blog,对Java字符串的匹配问题进行了简单的比较和总结,主要对String类的matches方法与Matcher类的matches方法进行了比较. 对Matcher类的matches( ...

  4. java中的File类

    File类 java中的File类其实和文件并没有多大关系,它更像一个对文件路径描述的类.它即可以代表某个路径下的特定文件,也可以用来表示该路径的下的所有文件,所以我们不要被它的表象所迷惑.对文件的真 ...

  5. 带有静态方法的类(java中的math类)

    带有静态方法的类通常(虽然不一定是这样)不打算被初始化. 可以用私有构造函数来限制非抽象类被初始化. 例如,java中的math类.它让构造函数标记为私有,所以你无法创建Math的实例.但Math类却 ...

  6. Java基础(43):Java中的Object类与其方法(转)

    Object类 java.lang.Object java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. O ...

  7. java中基于TaskEngine类封装实现定时任务

    主要包括如下几个类: 文章标题:java中基于TaskEngine类封装实现定时任务 文章地址: http://blog.csdn.net/5iasp/article/details/10950529 ...

  8. Java中的Unsafe类111

    1.Unsafe类介绍 Unsafe类是在sun.misc包下,不属于Java标准.但是很多Java的基础类库,包括一些被广泛使用的高性能开发库都是基于Unsafe类开发的,比如Netty.Hadoo ...

  9. Java中遍历实体类(处理MongoDB)

    在实际过程中,经常要将实体类进行封装,尤其是处理数据库的过程中:因此,对于遍历实体类能够与数据库中的一行数据对应起来. 我是使用的环境是Spring boot,访问的数据库时MongoDB 实体类遍历 ...

随机推荐

  1. scp跨主机拷贝工具

     参考:http://www.cnblogs.com/hitwtx/archive/2011/11/16/2251254.html SSH上A机,要将10.1.17.95机/tpdata/shell_ ...

  2. PHP多表取数据的代码优化

    <?php header("Content-type: text/html; charset=utf-8"); //假设这里的$goods_arr  和 $shop_arr  ...

  3. HDU 5724:Chess(博弈 + 状压)

    http://acm.hdu.edu.cn/showproblem.php?pid=5724 Chess Problem Description   Alice and Bob are playing ...

  4. 转 python range 用法

    详细记录python的range()函数用法   使用python的人都知道range()函数很方便,今天再用到他的时候发现了很多以前看到过但是忘记的细节.这里记录一下range(),复习下list的 ...

  5. 关于iframe嵌套、动态获取iframe内的url、父页面重定向

    1 $(function () { 2 //选择器是选择了easyui中的点击链接,出现新的iframe 3 $("a[target='mainFrame']").click(fu ...

  6. Linux下怎么运行java程序

    在Linux下安装好jdk配置好环境变量后,要回到程序所在的目录下,然后跟在windows一样输入   java (程序名)运行,原理是就好像在Windows的DOS环境下执行java这个命令时必须在 ...

  7. YTU 3022: 完全二叉树(1)

    原文链接:https://www.dreamwings.cn/ytu3022/2595.html 3022: 完全二叉树(1) 时间限制: 1 Sec  内存限制: 128 MB 提交: 26  解决 ...

  8. poj3270 Cow Sorting

    给定有序数组a[1...n]的一个置换a[σ(1)...σ(n)], 通过交换数组元素把置换后的数组恢复为有序, 定义进行一次交换的代价为两元素之和,试问此过程的最小总代价. 实际上一种置换即定义S ...

  9. Robberies(简单的01背包 HDU2955)

    Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  10. Visual Studio + SqlServer

    vs2010: http://pan.baidu.com/s/1eQrlUwU sqlServer2008: http://pan.baidu.com/s/1sjQbyk1