练习java文档Matcher
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相关推荐
- Java 中的 XML:Java 文档模型的用法
Java 中的 XML:Java 文档模型的用法 英文原文 内容: 代码对比 DOM JDOM dom4j Electric XML XPP 结束语 下一次... 参考资料 关于作者 对本文的评价 相 ...
- 【错误记录】生成 Java 文档错误 ( Xxx.java:xx: 错误: 编码GBK的不可映射字符 )
文章目录 一.报错信息 二.解决方案 一.报错信息 使用 javadoc 命令 , 生成 Java 文档 , 报错 ; javadoc Student.java D:\develop\javadoc& ...
- 【干货】求之不得的 Java 文档教程大汇总!
已收录至免费编程资源大全:https://github.com/liyupi/free-programming-resources 大家好,今天分享几个 GitHub 上非常实用的 Java 文档教程 ...
- 求之不得的 Java 文档教程大汇总!
已收录至免费编程资源大全:https://github.com/liyupi/free-programming-resources 大家好,我是鱼皮,今天分享几个 GitHub 上非常实用的 Java ...
- 七牛云图片--Java文档
七牛云图片–Java文档 简介 此 SDK 适用于 Java 7 及以上版本.使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云上.无论您的网络应用是一个网站程序,还 ...
- java文档注释 编写格式
java 文档注释 在sun主页上有java文档注释的编写格式 How to Write Doc Comments for the Javadoc Tool http://java.sun.com/j ...
- Java文档注释【自制API】
工具类的文档注释 工具类:一般都定义成静态的,只提供工具方法,没有特定数据,不需要构建对象. 为了保证不让其他成员创建对象,将无参的构造函数设置为私有化即可. 源文件: @author 作者 @ver ...
- IDEA JAVA文档注释和方法注释模板
IDEA JAVA文档注释和方法注释模板 文档注释 #if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${ ...
- 【项目总结】基于SpringBoot+Ansj分词+正倒排索引的Java文档搜索引擎项目总结
文章目录 项目介绍(开发背景) 主要用到的技术点 前端 后端 Ansj分词 实现索引模块 实现Parser类 实现Index类 完善Parser类 优化制作索引速度 实现搜索模块 实现DocSearc ...
- 【Java】花费数十小时,带你体验Java文档搜索引擎的实现过程
Java文档搜索引擎 项目运行效果 一.简述搜索引擎概念 二.搜索引擎实现思路 2.1倒排索引介绍 2.2项目目标 2.3获取java文档 2.4模块划分 2.5创建项目 2.6认识分词 2.7分词的 ...
最新文章
- 【动态规划】矩阵嵌套问题
- Python使用pandas的crosstab函数计算混淆矩阵并使用Seaborn可视化混淆矩阵实战
- java连接rabbitmq_没用过消息队列?一文带你体验RabbitMQ收发消息
- hdu-You can Solve a Geometry Problem too
- PHP获取文件的绝对路径
- 叹息“博客园”的凋零
- Python3.6字符串新特性
- bgp通告四原则_华为路由器BGP路由选路和负载均衡
- 滑动窗口1——无重复字符的最长字串
- 2345浏览器网址导航_2345导航,曾被网民吐槽劫持浏览器主页
- iOS 百度地图SDK接入与使用指南(以导航SDK为例):下载SDK、运行报错修改、代码编辑等
- HTML多行代码搞定微信8.0的炸裂特效!C/C++怎么能输
- 联想用u盘重装系统步骤_联想电脑怎样重新安装系统方法步骤详细教程 - 系统家园...
- android 控件宽度自适应_自适应各Android手机屏幕尺寸的解决方法
- 微信小程序模板消息测试- formId 的获取
- 运维——ssh无法登录云服务器
- Shopee账户被冻结是什么原因?怎么解封?
- 写作方法_论文写作方法
- css画钟表_html5 canvas 画的简易时钟
- 树莓派助力EMF伦敦无线电爱好者大会
热门文章
- 怎么白嫖一部好手机?我来告诉你
- c++ de-mangle 反编译器命名工具:c++filt
- 计算机主机安装威联通,我的智能网络进化 篇十二:威联通TS-453Bmini NAS加装内存,轻松玩转虚拟机安装win10系统...
- Unity/C# 随机生成中文名
- C语言中多个 \n 作用
- matlab 最小割集(需手动分析排除)
- python 读取合并单元格_python 读取合并单元格
- 计算机通信子网的作用,通信子网
- C++获取成员变量的偏移地址
- 自我学习从阅读和记录开始