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


猜你喜欢
- 经度指示南北方向,纵向纬度指示东西方向,横向获取经纬度使用GPS权限:<uses-permission android:name=&q
- 引言:关于java IO流的操作是非常常见的,基本上每个项目都会用到,每次遇到都是去网上找一找就行了,屡试不爽。上次突然一个同事问了我jav
- 目录1、简单介绍2、Lambdas和Scopes3、Lambdas与局部变量4、Lambda体与局部变量5、Lambdas和'Thi
- 本文实例为大家分享了Android实现记事本功能的具体代码,供大家参考,具体内容如下MainActivity.java代码:package
- Android平台有三种网络接口可以使用,他们分别是:java.net.*(标准Java接口)、Org.apache接口和Android.n
- Android 图片添加水印的实现方法实现效果图:手机端打水印(文字和图片)使用的是Bitmap、Matrix和Canvas类的一些方法,
- 活锁与死锁活锁活锁同样会发生在多个相互协作的线程间,当他们为了彼此间的响应而相互礼让,使得没有一个线程能够继续前进,那么就发生了活锁。同死锁
- 验证码的实现原理: 在一个Servlet中生成验证,并把验证码上的数据保存在Session,用户提交验证码之后,会提交给另外一个
- 在Java SE中,对IO流与集合的操作在应用中比较重要。接下来,我以一个小型项目的形式,演示IO流、集合等知识点在实践中的运用。该项目名称
- 前言本文主要介绍JWT的实战运用。准备工作首先我们创建一个Asp.Net的,包含MVC和WebApi的Web项目。然后使用Nuget搜索JW
- 学了Android有一段时间了,一直没有时间写博客,趁着周末有点空,就把自己做的一些东西写下来. 一方面锻炼一下自己的写文档的能力,另一方面
- 获取非公平锁(基于JDK1.7.0_40)非公平锁和公平锁在获取锁的方法上,流程是一样的;它们的区别主要表现在“尝试获取锁的机制不同”。简单
- jar包打包实现jar包打包可以使用jar指令实现打包,在命令行中输入jar可以查看jar指令的内容 从最后显示的两个示例看出存在两种打包的
- AndroidStduio3.0使用gradle将module打包jar文件,首先需要安装gradle。打开控制台输入  
- 所谓前人栽树,后人乘凉,在此感谢博主的贡献。 原文:边缘凹凸的卡劵效果先上效果图:我实现的效果和原博主实现的效果是不一样的,我是左右边缘凹凸
- 本文实例讲述了c#实现随鼠标移动窗体的方法,分享给大家供大家参考。具体实现方法如下:private void MainForm_Load(o
- 网上教程7.0大多数配置是这样compile ‘com.jakewharton:butterknife:7.0.1' ,不知道他们用
- 一般使用@RequestBody接收的时候报400都是传入的json字符串和对应封装的对象不对应造成的首先要注意封装的对象中的字段类型有没有
- dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有
- 本文实例讲述了WinForm调用jar包的方法。分享给大家供大家参考,具体如下:因为工作需要,需要做一个数据上传的程序,客户规定的是:数据接