Matcher使用
方法
appendReplacement(StringBuffer, String):比如cat two cats in the yard,第一次m.group(),就是把dog添加到StringBuffer中,然后第二次m.group()就是把two dog加入StringBuffer中,最后m.appendTail(StringBuffer) 把s in the yard添加到StringBuffer中。
appendTail()和appendReplacement()配合着使用,只有appendReplacement()之后,appendTail()才是真正的结尾,否则,appendTail()会把整个字符串都加入sb中
end() , 关于end(int)和group()的概念可以参考这篇博客:Java正则表达式Matcher.group(int group)相关类解析
其实group()的概念是在字符串中和模式匹配的那个字符串,默认是group(0),0就代表整个被匹配的字符串,如果匹配模式里面是这样写的"(a)(b)“就会有group(1)和group(2),1和2算是二级索引,end(int group)也是类似,这里的int group如果是0,代表一级索引,也就是整个字符串,如果是1、2之类的就代表二级索引。find()类似于(ResultSet )rs.next(),
end(String name)
find()
group()
group(String name)
关于end(String name) 、group(String name)、start(String name) 可以看这篇博客:Java Matcher group(String)最合适及代码示例
其实是采用在类似这样的语法,”(?\w)(?\d)",然后就可以使用group(“abc”)、start(“num”)、end(“num”)这样的写法了。
groupCount()
hasAnchoringBounds() 检测这个匹配器是否有区域边界的锚定。这个区域边界的锚定是什么?
hasTransparentBounds() 这个TransparentBounds我也不知道是什么
hitEnd()和find()反着来,find()为true,hitEnd()为false,find()为false() hitEnd()为true。
lookingAt() 和matches()差不多,但是不要求整个字符串,只要求开头和模式相等就好了。
matches()
pattern() 返回的和使用的pattern是同一个对象,= = 返回true
quoteReplacement()效果和Pattern.quote()一样,把特殊字符变成普通字符,也就是\d就是\d,不是任意数字
region()
regionStart()
regionEnd()
replaceAll() 其中一个需要Funcation<MatchResult,String>作为参数,这个先放着
replaceFirst() 情况和上面相似
requireEnd() 如果现在匹配是true,但是后面继续添加其他字符会导致匹配为false就返回true,如果现在匹配就是false,返回false。在使用requireEnd()之前要使用find()一下。默认现在匹配是false,返回也是false。
reset(), reset()不需要这样写 m = m.reset(“aaa”); 只要m.reset(“aaa”)就能生效。reset()无参数的话就是和find(0)差不多,但是不会找到第一个匹配项,只是把指针移动到最开始的位置
可以参考这篇博客:Java中具有示例的Matcher requireEnd()方法
results()
start()
toMatchResult() MatchResult类包括end()、group()、groupCount()和start()方法
toString()会返回

我感觉region是把中文字符当成1了,而不是2
region()这个方法也是这样
useAnchoringBounds() AnchoringBounds如果设置为true的话,边界将以region()这个方法设置的为准,类似^这样的符号可以测试。先对设置为false,的matcher测试,然后再对matcher测试,就是使用region调整到对应位置,但是开头并不是模式的情况下。也就是默认是true,以region调整后的位置为准,如果设置为false的话,以原本的字符串开头为准。
useTransparentBounds() 的话,如果为false则边界以region为准,如果设置为true,边界以原本字符串为准
以上这两个方法可以参考这篇博客:
关于JAVA正则表达式的useAnchoringBounds和useTransparentBounds

usePattern() 并不会把Matcher reset(),所以是不改变指针位置,修改Pattern,就是你在采茶,采了100棵嫩茶,然后叫你采老茶,不会让你把之前100棵重新采一遍。

import java.util.regex.*;
import java.util.*;
import java.util.function.*;
import java.util.stream.*;
public class Test
{public static void main(String[] args) throws Exception{//Matcher//方法//appendReplacement中的例子,没给输出。。。给了->writes one dog two dogs in the yard to the standard-output streamPattern p = Pattern.compile("cat");Matcher m = p.matcher("one cat two cats in the yard");StringBuffer sb = new StringBuffer();while(m.find()){m.appendReplacement(sb,"dog");}m.appendTail(sb);System.out.print(sb.toString());System.out.println("a");//仿照上面的例子p = Pattern.compile("风清扬");m = p.matcher("我是风清扬,我很孤独,因为我风清扬天下无敌。");StringBuffer sb2 = new StringBuffer();while(m.find()){m.appendReplacement(sb2,"独孤求败");}m.appendTail(sb2);System.out.println(sb2.toString());//使用StringBuilder再写一个例子p = Pattern.compile("莫提");m = p.matcher("我是莫提,我厌倦了一切,所以我莫提只能用冒险来提醒我莫提还活着。");StringBuilder sb3 = new StringBuilder();while(m.find()){m.appendReplacement(sb3,"瑞克");}m.appendTail(sb3);System.out.println(sb3.toString());StringBuffer sb4 = new StringBuffer();p = Pattern.compile("aaa");m = p.matcher("828aasdf729");while(m.find()){m.appendReplacement(sb3,"bbb");}m.appendTail(sb4);System.out.println( sb4.toString());p = Pattern.compile("(张)(\\W{2})");m = p.matcher("张无忌,掌握九阳真经,乃是世间第一高手,且张无忌为人不坏,黑白两道"+"皆以张无忌马首是瞻,后张无忌明教打下的江山,还是被朱元璋用阴谋诡计夺去了。"+"不过想来,张无忌也是不会做皇帝的,自由也是他的一个特征,要是有人被关在山里"+"十几二十年,早就疯了,张无忌不一样,依旧活的非常开心,自在");int i = 0;/*while(m.find()){i++;System.out.println("group("+i+"):"+m.group(2)+",start:"+m.start(2)+",end:"+m.end(2));}*/System.out.println("groupCount is -->"+m.groupCount());m.find();System.out.println(m.end(2));p = Pattern.compile("(\\W)(\\d{2})");m = p.matcher("李25是王38的邻居,有一天,李25被杨78打了,就找王38去报仇,王38说我不敢。。。李25:。。。");m.find();System.out.println("m.group(0):"+m.group(0)+",m.group(1):"+m.group(1)+",m.group(2):"+m.group(2));System.out.println("m.start(0):"+m.start(0)+",m.start(1):"+m.start(1)+",m.start(2):"+m.start(2));System.out.println("m.end(0):"+m.end(0)+",m.end(1):"+m.end(1)+",m.end(2):"+m.end(2));//System.out.println(m.end("(\\W)"));m.find(0);System.out.println(m.group());p = Pattern.compile("(\\W)(?<aaa>\\w+)");m = p.matcher("李ab");m.find();System.out.println(m.group("aaa"));System.out.println(m.end("aaa"));p = Pattern.compile("(\\W)(\\d)(\\w)");m = p.matcher("李1C爱上了王2B,王2B却爱上了刘0L,真是一个畸形的三5l");System.out.println(m.groupCount());System.out.println(m.hasAnchoringBounds());p = Pattern.compile("\\W");m = p.matcher("我292398李32iii王");System.out.println(m.hasAnchoringBounds());System.out.println(m.hasTransparentBounds());while(m.find()){System.out.println(m.group()+":"+m.end()+":"+m.hitEnd());}System.out.println(m.hitEnd());p = Pattern.compile("(a*b)(foo)");m = p.matcher("aabfooaabfooabfoo");while(m.find()){System.out.println(m.group()+":"+m.end());}System.out.println(m.hitEnd());p = Pattern.compile("\\d");m = p.matcher("q1w2e3r4r5adsfadsf");System.out.println(m.find(15));System.out.println(m.hitEnd());p = Pattern.compile("\\d{3}");m = p.matcher("123ad");System.out.println(m.matches());//System.out.println(m.group()+":"+m.start()+":"+m.end());System.out.println(m.lookingAt());System.out.println(m.group()+":"+m.start()+":"+m.end());System.out.println(m.pattern()==Pattern.compile("\\d{3}"));p = Pattern.compile(Matcher.quoteReplacement("\\d"));m = p.matcher("\\d");System.out.println(m.matches());p = Pattern.compile("\\W");m = p.matcher("我 is your 父亲,你 is my 儿子");while(m.find()){System.out.println("without region:"+m.group());}System.out.println(m.regionStart()+":"+m.regionEnd());m = m.region(3,15);while(m.find()){System.out.println("region:"+m.group());}System.out.println(m.regionStart()+":"+m.regionEnd());p = Pattern.compile("小\\W");m = p.matcher("小刘是三好学生,小王是四好学生,小李是五好学生");System.out.println(m.replaceAll("大王"));System.out.println(m.replaceFirst("小兵"));p = Pattern.compile("8");m = p.matcher("adsfaaadsf");if(m.find()){System.out.println("有匹配项");}System.out.println(m.requireEnd());m.reset("112389");System.out.println(m.find());System.out.println(m.find());m.reset();System.out.println(m.find());p = Pattern.compile("\\d");m = p.matcher("1q3t6i");Stream<MatchResult> stream = m.results();stream.forEach((result)->System.out.println(result.group()));p = Pattern.compile("(?<a>\\W{2,3})");m = p.matcher("张老二a王麻子b刘琉璃");while(m.find()){System.out.println("m.group():"+m.group()+" : "+m.group("a")+":"+m.start("a"));}p = Pattern.compile("\\W\\d");m = p.matcher("老6A全9B");m.find();MatchResult mr = m.toMatchResult();System.out.println(mr.group());m.reset();System.out.println("未find()"+m.toString());m.find();System.out.println("find()"+m.toString());//m.region(1,7);System.out.println(m.regionStart()+":"+m.regionEnd());p = Pattern.compile("^a");m = p.matcher("abc");m.useAnchoringBounds(false);if(m.find()){System.out.println(m.group());}p = Pattern.compile("^a");m = p.matcher("bbbbbaaaa");//m.useAnchoringBounds(false);m.region(5,8);System.out.println(m.find());p = Pattern.compile("^a");m = p.matcher("bbbbbaaaa");m.useAnchoringBounds(true);m.region(5,8);System.out.println(m.find());System.out.println(m.toString());p = Pattern.compile("\\bsea\\b");m = p.matcher("i lovesea");m.useTransparentBounds(false);m.region(6,9);System.out.println(m.find());System.out.println(m.toString());p = Pattern.compile("\\bsea\\b");m = p.matcher("i lovesea");m.useTransparentBounds(true);m.region(6,9);System.out.println(m.find());System.out.println(m.toString());p = Pattern.compile("\\W");m = p.matcher("我拍1你拍1,你是1个大傻逼");while(m.find()){System.out.println("以"+p+"为Pattern:"+m.group());}p = Pattern.compile("\\d");m.usePattern(p);m.reset();while(m.find()){System.out.println("以"+p+"为Pattern:"+m.group());}}}

练习java文档Matcher相关推荐

  1. Java 中的 XML:Java 文档模型的用法

    Java 中的 XML:Java 文档模型的用法 英文原文 内容: 代码对比 DOM JDOM dom4j Electric XML XPP 结束语 下一次... 参考资料 关于作者 对本文的评价 相 ...

  2. 【错误记录】生成 Java 文档错误 ( Xxx.java:xx: 错误: 编码GBK的不可映射字符 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 使用 javadoc 命令 , 生成 Java 文档 , 报错 ; javadoc Student.java D:\develop\javadoc& ...

  3. 【干货】求之不得的 Java 文档教程大汇总!

    已收录至免费编程资源大全:https://github.com/liyupi/free-programming-resources 大家好,今天分享几个 GitHub 上非常实用的 Java 文档教程 ...

  4. 求之不得的 Java 文档教程大汇总!

    已收录至免费编程资源大全:https://github.com/liyupi/free-programming-resources 大家好,我是鱼皮,今天分享几个 GitHub 上非常实用的 Java ...

  5. 七牛云图片--Java文档

    七牛云图片–Java文档 简介 此 SDK 适用于 Java 7 及以上版本.使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云上.无论您的网络应用是一个网站程序,还 ...

  6. java文档注释 编写格式

    java 文档注释 在sun主页上有java文档注释的编写格式 How to Write Doc Comments for the Javadoc Tool http://java.sun.com/j ...

  7. Java文档注释【自制API】

    工具类的文档注释 工具类:一般都定义成静态的,只提供工具方法,没有特定数据,不需要构建对象. 为了保证不让其他成员创建对象,将无参的构造函数设置为私有化即可. 源文件: @author 作者 @ver ...

  8. IDEA JAVA文档注释和方法注释模板

    IDEA JAVA文档注释和方法注释模板 文档注释 #if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${ ...

  9. 【项目总结】基于SpringBoot+Ansj分词+正倒排索引的Java文档搜索引擎项目总结

    文章目录 项目介绍(开发背景) 主要用到的技术点 前端 后端 Ansj分词 实现索引模块 实现Parser类 实现Index类 完善Parser类 优化制作索引速度 实现搜索模块 实现DocSearc ...

  10. 【Java】花费数十小时,带你体验Java文档搜索引擎的实现过程

    Java文档搜索引擎 项目运行效果 一.简述搜索引擎概念 二.搜索引擎实现思路 2.1倒排索引介绍 2.2项目目标 2.3获取java文档 2.4模块划分 2.5创建项目 2.6认识分词 2.7分词的 ...

最新文章

  1. 【动态规划】矩阵嵌套问题
  2. Python使用pandas的crosstab函数计算混淆矩阵并使用Seaborn可视化混淆矩阵实战
  3. java连接rabbitmq_没用过消息队列?一文带你体验RabbitMQ收发消息
  4. hdu-You can Solve a Geometry Problem too
  5. PHP获取文件的绝对路径
  6. 叹息“博客园”的凋零
  7. Python3.6字符串新特性
  8. bgp通告四原则_华为路由器BGP路由选路和负载均衡
  9. 滑动窗口1——无重复字符的最长字串
  10. 2345浏览器网址导航_2345导航,曾被网民吐槽劫持浏览器主页
  11. iOS 百度地图SDK接入与使用指南(以导航SDK为例):下载SDK、运行报错修改、代码编辑等
  12. HTML多行代码搞定微信8.0的炸裂特效!C/C++怎么能输
  13. 联想用u盘重装系统步骤_联想电脑怎样重新安装系统方法步骤详细教程 - 系统家园...
  14. android 控件宽度自适应_自适应各Android手机屏幕尺寸的解决方法
  15. 微信小程序模板消息测试- formId 的获取
  16. 运维——ssh无法登录云服务器
  17. Shopee账户被冻结是什么原因?怎么解封?
  18. 写作方法_论文写作方法
  19. css画钟表_html5 canvas 画的简易时钟
  20. 树莓派助力EMF伦敦无线电爱好者大会

热门文章

  1. 怎么白嫖一部好手机?我来告诉你
  2. c++ de-mangle 反编译器命名工具:c++filt
  3. 计算机主机安装威联通,我的智能网络进化 篇十二:威联通TS-453Bmini NAS加装内存,轻松玩转虚拟机安装win10系统...
  4. Unity/C# 随机生成中文名
  5. C语言中多个 \n 作用
  6. matlab 最小割集(需手动分析排除)
  7. python 读取合并单元格_python 读取合并单元格
  8. 计算机通信子网的作用,通信子网
  9. C++获取成员变量的偏移地址
  10. 自我学习从阅读和记录开始