java 正则替换 或_Java正则替换
/**
* 替换上下文
*
* @author tianhongjun
*
*/
static class EvaluateContext {
private int startPos;
private int endPos;
private String replacement;
}
public interface IEvaluator {
String evaluate(String[] groups);
}
/**
* 正则替换
*
* @param src 原始字符串
* @param regex 替换正则
* @param replacer 替换器(根据匹配的内容不同返回不同的替换值,类似模板替换)
* @return
*/
public static String replace(final String src, final Pattern regex, IEvaluator replacer) {
final Matcher m = regex.matcher(src);
// 先查询匹配
List ctxs = new ArrayList<>();
while (m.find()) {
// 记录所有匹配的位置 & 匹配结果
EvaluateContext ctx = new EvaluateContext();
ctx.startPos = m.start();
ctx.endPos = m.end();
// System.out.println("grp count = " + m.groupCount());
String[] groups = new String[m.groupCount() + 1];
groups[0] = m.group();
for (int i = 0; i < m.groupCount(); i++) {
groups[i + 1] = m.group(i + 1);
}
ctx.replacement = replacer.evaluate(groups);
ctxs.add(ctx);
}
// 再进行替换
List parts = new ArrayList<>();
int sp = 0;
for (EvaluateContext ctx : ctxs) {
if (sp < ctx.startPos) {
parts.add(src.substring(sp, ctx.startPos));
}
parts.add(ctx.replacement);
sp = ctx.endPos;
}
// 结尾补齐
if (sp < src.length()) {
parts.add(src.substring(sp));
}
StringBuilder sb = new StringBuilder();
for (String s : parts) {
sb.append(s);
}
return sb.toString();
}
标签:src,Java,String,sp,ctx,正则,parts,替换
来源: https://www.cnblogs.com/top10/p/11112696.html
java 正则替换 或_Java正则替换相关推荐
- java各种符号用法_Java正则的基本用法一:符号
import java.awt.List; import java.util.ArrayList; /************************************************* ...
- java 正则 标签内容_java正则匹配html片段,并取得标签中的内容
最近java群好友发来一个html代码,要帮忙匹配查找html代码里面特定的内容: 代码如下: 年代:2013年 朝向:东北 楼层:第10层(共33层) 结构:平层 装修:毛坯 住宅类别:普通住宅 建 ...
- java替换特殊字符_Java StringBuffer替换特殊字符
在本实例中为保证学生输入的 Java 文件名合格,将利用 StringBuffer 类实现对 Java 文件名中的特殊符号进行替换,包括将中文状态下的"."和全角状态下的" ...
- java 正则高级应用_JAVA正则表白式高级用法(分组与捉拿).
((A)(B(C)))/A(B(C))(C) 组零始终代表全副表白式 之因而这么命名捉拿组是因为在相称中,保留了与这些组相称的输入序列的每个子序列.捉拿的子序列稍后能够穿越 Back 引用在表白式中利 ...
- java 修改word属性_Java修改/替换Word批注
本文将介绍通过Java程序 来修改或替换Word文档中已有的批注内容.修改或替换方法包括: 使用新的文本替换原有批注中的文本 使用新的文本替换原有批注中的图片 使用新的图片替换原有批注中的图片 使用工 ...
- java正则表达式 替换空格_Java正则表达式替换移除空行和多余的空格
这几天重拾Java写代码,须要操做文本文件中的内容.正则表达式 最终,要把内容里的空行和多余的连续空格移除,使用String里的replace或者replaceAll,试了不少次都没有成功.spa 最 ...
- java歌词解析器_JAVA 正则解析歌词
//目录结构 //来看一下歌词内容 [00:00.00]领袖音乐分享平台 http://www.kugou.com [00:02.31]Pretty boy-M2M 英俊男孩 JY93653制作 [0 ...
- java 正则 html 标签_Java正则 HTML 标签 得到 纯文本
public static String Html2Text(String inputString){ String htmlStr = inputString; //含html标签的字符串 Stri ...
- java 正则出特殊字符_java正则_特殊字符处理
一.特殊字符转义 点的转义:. ==> \\u002E 美元符号的转义:$ ==> \\u0024 乘方符号的转义:^ ==> \\u005E 左大括号的转义:{ ==> \\ ...
最新文章
- [Android]手动触发OnClick事件
- 使用Python在Selenium WebDriver中获取WebElement的HTML源代码
- careercup-高等难度 18.5
- 监控软件nagios错误总结
- 刚刚,阿里云知行动手实验室正式开放公测了
- 单位脉冲信号与单位冲激信号的区别
- .NET 也有 Husky 了
- python静态变量_python静态变量
- 解密Go协程的栈内存管理
- ASP.NET验证码的实现
- 华为P40系列发布时间或敲定:继续在3月26日亮相?
- java字符串内存长度固定_深入理解 Java String#intern() 内存模型
- oracle-第N篇加强专题
- ios、iphone越狱获取系统文件权限
- 数十万互联网从业者的共同关注!
- 苹果有arkit,android,ARKit来袭:苹果ar支持哪些设备,苹果手机怎么使用ar?
- GitLab-Runner 从安装到配置到入门
- int *pa[5]中的pa是什么
- Windows CMD命令行一启动就闪退问题解决
- 运营商大数据的市场价值有那些作用?
热门文章
- 图论--最近公共祖先LCA
- 2013美国火爆科幻片【僵尸世界大战】清晰版下载
- 实现一个输出字符串中各个字符出现的频率frequency函数
- 职业秘书写给女友的求婚信
- Java—实现 RPG 人物生成器
- 盘点:2018年25个最佳数据可视化作品都在这了!
- 计算机辅助教学在语文上应用,计算机辅助教学在语文教学过程中的运用-小学语文论文-语文论文-教师论文.docx...
- android微信分享 sendreq 返回true 不跳转,使用微信开放平台接口,为什么sendReq一个文本消息,返回值为true,但是发不出去?...
- Python 学习8-数据可视化1
- 执法机构洋气了:网络黑产市场遭警告