java中replaceAll替换圆括号实例代码
作者:天狼1222 发布时间:2023-09-30 16:29:54
标签:replaceall,替换,圆括号
前言
在手写sql的时候,根据参数处理查询条件.
select * from staff where 1 = 1 and staff_id in ($staffIds)
and staff_name in ($staffNames)
比如staffId为空,需要把staff_id in ($staffIds) 候设置为true,staffName正常赋值
replace替换圆括号
public static void main(String[] args) {
String sqlStr = "select * from staff where 1 = 1 and staff_id in ($staffIds) " +
"and staff_name in ($staffNames)";
String replaceEmpty = "staff_id in ($staffIds)";
String replaceSql = sqlStr.replace(replaceEmpty, "true");
System.out.println(replaceSql);
}
结果:
select * from staff where 1 = 1 and true and staff_name in ($staffNames)
直接用replace就可以了。
replaceAll替换圆括号
如果是想用replaceAll呢?
public static void main(String[] args) {
String sqlStr = "select * from staff where 1 = 1 and staff_id in ($staffIds) " +
"and staff_name in ($staffNames)";
String replaceEmpty = "staff_id in ($staffIds)";
String replaceAllSql = sqlStr.replaceAll(Matcher.quoteReplacement(replaceEmpty), "true");
System.out.println(replaceAllSql);
}
结果:
select * from staff where 1 = 1 and staff_id in ($staffIds)
and staff_name in ($staffNames)
没有替换成功,为什么呢?
看replaceAll的方法:
public String replaceAll(String regex, String replacement) {
return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}
regex 对应的是正则的内容,因此要对圆括号进行转移下:
String replaceAllSql = replaceEmpty = replaceEmpty.replaceAll("\\(", "[( )]").replaceAll("\\)", "[( )]");
替换前,对圆括号进行转义
public static void main(String[] args) {
String sqlStr = "select * from staff where 1 = 1 and staff_id in ($staffIds) " +
"and staff_name in ($staffNames)";
String replaceEmpty = "staff_id in ($staffIds)";
replaceEmpty = replaceEmpty.replaceAll("\\(", "[( )]").replaceAll("\\)", "[( )]");
String replaceAllSql = sqlStr.replaceAll(Matcher.quoteReplacement(replaceEmpty), "true");
System.out.println(replaceAllSql);
}
结果:
select * from staff where 1 = 1 and true and staff_name in ($staffNames)
替换成功。
补充:Java 利用replaceAll 替换中括号
Java的replaceAll函数默认是不能替换中括号的,例如想替换[b]到<b>,结果却就变成[<b>]
解决方案就是首先利用正则表达式替换中括号,然后再替换中括号内的内容:
infos = infos.replaceAll("[\\[\\]]","");
不过后来又查询了下资料,发现中括号在java中居然是特殊字符,一对中括号里的内容是一组正则表达式。所以如果打算让[b]-><b>,只要如下写法:
infos = infos.replaceAll("\\[b\\]","<b>");
总结:
字符替换的时候,优先考虑使用replace,多个时候,也是生效的。如果要使用replace的话,使用要注意特殊字符的处理。或者自己写正则进行处理。
优化: 《整体替换sql》
来源:https://blog.csdn.net/qq_35461948/article/details/123126296
0
投稿
猜你喜欢
- 最近学习了一下seata,由于nacos现在也挺火,于是学习了seata注册到nacos,然后集成springcloud1.nacos配置(
- Java7引入了Fork Join的概念,来更好的支持并行运算。顾名思义,Fork Join类似与流程语言的分支,合并的概念。也就是说Jav
- bean 的生命周期对象创建实例化Bean对象,默认选择无参构造方法,如果只有一个有参构造那么调用有参构造,如果只有多个有参构造那么报错,除
- 问题分析疑惑满满小枫听到这个面试题的时候,心想这是什么水面试官,怎么问这么简单的题目,心想一个for循环加上equal判断再删除不就完事了吗
- 本文主要带大家看看Object类中一些常用方法的API文档的介绍和JDK中的源码。1.equals方法1.API中equals方法的介绍2.
- final关键字的作用final关键字可以用来修饰引用、方法和类。1.final关键字修饰类当用final关键字修饰一个类后,这个类不能被继
- 先看看代码再说:package com.b510.note; import java.math.BigInteger;
- 在gitee上创建springcloud仓库 application.yaml(https方式)server: por
- 1.前言在Mybatis中需要创建的配置文件有sqlMapconfig.xml,映射文件xxxMapper.xml,而这些文件在idea中并
- GlobalLock的作用对于某条数据进行更新操作,如果全局事务正在进行,当某个本地事务需要更新该数据时,需要使用@GlobalLock确保
- 本文实例为大家分享了C语言实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下IDE用的是 VS2019先看效果 代码全览game.
- 本文为大家分享了Java实现文件上传下载功能的具体代码,供大家参考,具体内容如下前端通过form表单的enctype属性,将数据传递方式修改
- Pager.javapackage pers.kangxu.datautils.common;import java.io.Serializ
- 一 技术发展技术的创新和发展都是为了解决一类问题二 框架设计Spring Framework 6大模块三 Spring AOP详解循环依赖问
- 在微信公众号里面需要上传头像,时间比较紧,调用学习jssdk并使用 来不及 就用了input1、使用input:file标签, 去调用系统默
- java联调生成测试数据工具类在日常的联调中,我们经常需要准备一定数量的测试数据,用来配合前端测试。当然对于简单的数据类型完全可以通过 JD
- 本文中我们会讲解如何在Spring Boot JPA中实现class和数据表格的映射。默认实现Spring Boot JPA底层是用Hibe
- 1.alibaba falstjson1.Map转JSONMap<String, Object> map = new HashM
- 一、引言90坦克大战,很经典的一款游戏,当年与小伙伴一人一个手柄,搬上小板凳坐在电视机前,身体时不时跟随手柄摇晃着,时而表情严肃、眉头紧锁,
- import java.util.List;/*** * 基本接口 * * @author xyq