java正则表达式精确查找和替换指定字符代码示例

 更新时间:2024年04月28日 10:20:38   作者:天狼1222  
这篇文章主要给大家介绍了关于java正则表达式精确查找和替换指定字符的相关资料,java正则表达式是一种用于匹配、查找和替换文本的强大工具,它可以用于验证输入是否符合特定的格式、从文本中提取信息、以及将文本中的某些内容替换成其他内容,需要的朋友可以参考下

情形:

在复制模型的时候,要给名称加上“-复制”。一开始用的是 replace进行全部替换。在测试的时候,出现有元素名称跟模型名称是一样的,这样替换就有问题。这时候要改成正则去匹配和替换对应内容。

{
	"flowModel": {
		"flowMod": 502,
		"flowType": 2,
		"flowTypeName": "普通流程",
		"flowTypeNameUs": "common",
		"flowName": "流程表单模型A",
		"flowNameUs": "流程表单模型A",
		"fieldName": "流程表单模型A",
		"state": "A"
	},
	"formModel": {
		"formId": 108,
		"flowMod": 502,
		"flowName": "流程表单模型A",
		"flowNameUs": "流程表单模型A",
		"formName": "流程表单模型A",
		"formNameUs": "流程表单模型A",
		"fieldName": "流程表单模型A"
	}
}

目标: 替换里面 flowName, flowNameUs,formName和formNameUs的名称

先处理一个

先写正则表单式: 

String pattern ="\"flowName\""+ ":"+"\\s*\"" + modelName + "\"";

\\s*可以匹配0到多个空格

匹配到对应值后,用整个值进行替换

public static String matchReplaceName(String content, String modelName, String newModelName)
    {
        String pattern ="\"flowName\""+ ":"+"\\s*\"" + modelName + "\"";
        System.out.println("pattern "+pattern);
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(content);
        StringBuffer sb = new StringBuffer();
        while (m.find()) {
            String group = m.group();
            m.appendReplacement(sb, group.replace(modelName, newModelName));
        }
        m.appendTail(sb);
        return sb.toString();
    }

测试:

    public static void main(String[] args) {
        String content = initData();
        String modelName = "流程表单模型A";
        String newModelName = "流程表单模型A-复制";
        content = matchReplaceName(content, modelName, newModelName);
        System.out.println(content);
    } 

    private static String initData(){
        String data = "{\n" +
                "\t\"flowModel\": {\n" +
                "\t\t\"flowMod\": 502,\n" +
                "\t\t\"flowType\": 2,\n" +
                "\t\t\"flowTypeName\": \"普通流程\",\n" +
                "\t\t\"flowTypeNameUs\": \"common\",\n" +
                "\t\t\"flowName\": \"流程表单模型A\",\n" +
                "\t\t\"flowNameUs\": \"流程表单模型A\",\n" +
                "\t\t\"fieldName\": \"流程表单模型A\",\n" +
                "\t\t\"state\": \"A\"\n" +
                "\t},\n" +
                "\t\"formModel\": {\n" +
                "\t\t\"formId\": 108,\n" +
                "\t\t\"flowMod\": 502,\n" +
                "\t\t\"flowName\": \"流程表单模型A\",\n" +
                "\t\t\"flowNameUs\": \"流程表单模型A\",\n" +
                "\t\t\"formName\": \"流程表单模型A\",\n" +
                "\t\t\"formNameUs\": \"流程表单模型A\",\n" +
                "\t\t\"fieldName\": \"流程表单模型A\"\n" +
                "\t}\n" +
                "}";
        return data;
    }

结果:

pattern "flowName":\s*"流程表单模型A"
{
	"flowModel": {
		"flowMod": 502,
		"flowType": 2,
		"flowTypeName": "普通流程",
		"flowTypeNameUs": "common",
		"flowName": "流程表单模型A-复制",
		"flowNameUs": "流程表单模型A",
		"fieldName": "流程表单模型A",
		"state": "A"
	},
	"formModel": {
		"formId": 108,
		"flowMod": 502,
		"flowName": "流程表单模型A-复制",
		"flowNameUs": "流程表单模型A",
		"formName": "流程表单模型A",
		"formNameUs": "流程表单模型A",
		"fieldName": "流程表单模型A"
	}
}

多个的:

表达式:

完成了单个,多个的用"|"进行分隔,先继续写单个的,然后拼接多一起

     public static String matchReplaceName(String content, String modelName, String newModelName)
    {
        String condition = ":"+"\\s*\"" + modelName + "\"";
        String pattern1 = "\"flowName\""+condition;
        String pattern2 = "\"flowNameUs\""+condition;
        String pattern3 = "\"formName\""+condition;
        String pattern4 = "\"formNameUs\""+condition;
        String pattern = pattern1 +"|"+pattern2+"|"+ pattern3 +"|"+pattern4;
        System.out.println("pattern "+pattern);
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(content);
        StringBuffer sb = new StringBuffer();
        while (m.find()) {
            String group = m.group();
            group = group.replace(modelName, newModelName);
            m.appendReplacement(sb, group);
        }
        m.appendTail(sb);
        return sb.toString();
    }

最后可以把pattern的输出弄成一整行

测试结果:

pattern "flowName":\s*"流程表单模型A"|"flowNameUs":\s*"流程表单模型A"|"formName":\s*"流程表单模型A"|"formNameUs":\s*"流程表单模型A"
{
	"flowModel": {
		"flowMod": 502,
		"flowType": 2,
		"flowTypeName": "普通流程",
		"flowTypeNameUs": "common",
		"flowName": "流程表单模型A-复制",
		"flowNameUs": "流程表单模型A-复制",
		"fieldName": "流程表单模型A",
		"state": "A"
	},
	"formModel": {
		"formId": 108,
		"flowMod": 502,
		"flowName": "流程表单模型A-复制",
		"flowNameUs": "流程表单模型A-复制",
		"formName": "流程表单模型A-复制",
		"formNameUs": "流程表单模型A-复制",
		"fieldName": "流程表单模型A"
	}
}

附:如何在java中获取两个字符之间的精确字符串

在Java中,可以使用String类的substring()方法来获取两个字符之间的精确字符串。该方法接受两个参数,分别是起始索引和结束索引(不包括结束索引)。下面是一个示例代码:

String str = "Hello, World!";
int startIndex = 7; // 起始索引
int endIndex = 13; // 结束索引(不包括)
String result = str.substring(startIndex, endIndex);
System.out.println(result); // 输出 "World"

在上述示例中,我们定义了一个字符串"Hello, World!",然后使用substring()方法获取了索引为7到12的子字符串,即"World"。

需要注意的是,索引是从0开始的,所以起始索引为7表示从第8个字符开始,结束索引为13表示到第14个字符之前结束。

这种方法适用于获取两个字符之间的精确字符串,可以用于各种字符串处理场景,例如提取关键信息、截取特定部分等。

总结:

如果要精确替换指定字符,可以考虑正则,\\s*可以匹配0到多个空格 适用性会replace更好。先从单个开始入手,再逐个增加,验证,这样更能发现问题和调试。

到此这篇关于java正则表达式精确查找和替换指定字符的文章就介绍到这了,更多相关java正则精确查找替换字符内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java并发编程变量可见性避免指令重排使用详解

    Java并发编程变量可见性避免指令重排使用详解

    这篇文章主要为大家介绍了Java并发编程变量可见性避免指令重排使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Java使用访问者模式解决公司层级结构图问题详解

    Java使用访问者模式解决公司层级结构图问题详解

    这篇文章主要介绍了Java使用访问者模式解决公司层级结构图问题,结合实例形式分析了访问者模式的概念、原理及Java使用访问者模式解决公司曾经结构图问题的相关操作技巧与注意事项,需要的朋友可以参考下
    2018-04-04
  • java数据结构算法稀疏数组示例详解

    java数据结构算法稀疏数组示例详解

    这篇文章主要为大家介绍了java数据结构算法稀疏数组示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 浅谈Spring Cloud Ribbon的原理

    浅谈Spring Cloud Ribbon的原理

    这篇文章主要介绍了浅谈Spring Cloud Ribbon的原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Java Servlet异步请求开启的简单步骤

    Java Servlet异步请求开启的简单步骤

    Java servlet是大家公认的服务器端web技术的标准,包括jsp,jsf,和大量的web框架,soap,RESTful web service api,还有新闻供应,下面这篇文章主要给大家介绍了关于Java Servlet异步请求开启的简单步骤,需要的朋友可以参考下
    2022-02-02
  • spring 如何解决循环依赖

    spring 如何解决循环依赖

    这篇文章主要介绍了spring 如何解决循环依赖,帮助大家更好的理解和学习使用spring框架,感兴趣的朋友可以了解下
    2021-02-02
  • Spring中@Value注解的使用方法详解

    Spring中@Value注解的使用方法详解

    这篇文章主要介绍了Spring中@Value注解的使用方法详解,在spring项目中必不可少的就是读取配置文件,那么读取配置文件就有两种方式,一种就是使用Spring中@Value注解,还有一种是使用SpringBoot中的@ConfigurationProperties注解,需要的朋友可以参考下
    2024-01-01
  • Spring Boot + Spring Batch 实现批处理任务的详细教程

    Spring Boot + Spring Batch 实现批处理任务的详细教程

    这篇文章主要介绍了Spring Boot+Spring Batch实现批处理任务,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • MyBatis使用注解开发实现步骤解析

    MyBatis使用注解开发实现步骤解析

    这篇文章主要介绍了MyBatis使用注解开发实现步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Sprigmvc项目转为springboot的方法

    Sprigmvc项目转为springboot的方法

    本篇文章主要介绍了Sprigmvc项目转为springboot的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02

最新评论