我试图理解matches()find()之间的区别.

根据Javadoc(据我所知),matches()将搜索整个字符串,即使它找到了它正在寻找的内容,而find()将在找到它正在寻找的内容时停止.

如果这个假设是正确的,我看不出你什么时候想用matches()而不是find(),除非你想计算它找到的匹配数.

在我看来,String类的内置方法应该是find()而不是matches().

总结一下:

  1. 我的假设正确吗?
  2. 什么时候用matches()代替find()有用呢?

推荐答案

matchestry 将表达式与整个字符串匹配,并在模式的开头隐式添加^,在模式的结尾隐式添加$,这意味着它不会查找子字符串.因此,这段代码的输出是:

public static void main(String[] args) throws ParseException {
    Pattern p = Pattern.compile("\\d\\d\\d");
    Matcher m = p.matcher("a123b");
    System.out.println(m.find());
    System.out.println(m.matches());

    p = Pattern.compile("^\\d\\d\\d$");
    m = p.matcher("123");
    System.out.println(m.find());
    System.out.println(m.matches());
}

/* output:
true
false
true
true
*/

123a123b的子字符串,因此find()方法输出true.matches()只"看到"a123b,这与123不同,因此输出为假.

Java相关问答推荐

基于仅存在于父级中的字段查询子文档?

如果给定层次 struct 级别,如何从其预序穿越构造n元树

在for—each循环中的AnimationTimer中的if语句'

根据对象和值的参数将映射<;T、值&>转换为列表<;T&>

不推荐使用的Environment.getExternalStorageDirectory().getAbsolutePath()返回的值不同于新的getExternalFilesDir(空)?

无法在Java中处理PayPal支付响应

在向WebSphere中的文档添加元素时iText挂起

如何在 spring 数据的MongoDB派生查询方法中使用$EXISTS

有效的公式或值列表必须少于或等于255个字符

解析方法";javax/imageio/metadata/IIOMetadata.getAsTree(Ljava/lang/String;)Lorg/w3c/dom/Node时加载约束冲突

Spring Boot&;Docker:无法执行目标org.springframework.boot:spring-boot-maven-plugin:3.2.0:build-image

Regex以查找不包含捕获组的行

根本不显示JavaFX阿拉伯字母

无法播放音频:从资源加载库GStreamer-Lite失败

Java组件项目中的JavaFX对话框国际化

如何在ApacheHttpClient 5中为单个请求设置代理?

Java中的发布/订阅-Long Live和Short Live Publisher,哪种方法是正确的?

如何在右击时 Select 新行?

按长度排序字符串数组

为什么child-pom会创建一个新版本