java中replaceAll替换圆括号实例代码

 更新时间:2022年10月09日 11:40:33   作者:天狼1222  
正则表达式的保留字符主要有:圆括号、方括号、花括号、竖线、横线、点号、加号、星号、反斜杆等等,下面这篇文章主要给大家介绍了关于java中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》

到此这篇关于java中replaceAll替换圆括号的文章就介绍到这了,更多相关java replaceAll替换圆括号内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot项目整合注册功能模块开发实战

    springboot项目整合注册功能模块开发实战

    这篇文章主要介绍了springboot项目整合注册功能模块开发实战,在用户的注册是首先需要查询当前的用户名是否存在,如果存在则不能进行注册,相当于一个查询语句,本文通过实例代码详细讲解,需要的朋友可以参考下
    2022-11-11
  • java计算集合对称差的示例代码

    java计算集合对称差的示例代码

    本篇文章主要介绍了java计算集合对称差的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • SpringBoot程序打包失败(.jar中没有主清单属性)

    SpringBoot程序打包失败(.jar中没有主清单属性)

    在学习SpringBoot,打包SpringBoot程序后,在cmd运行出现了 某某某.jar中没有注清单属性,本文就来介绍一下原因以及解决方法,感兴趣的可以了解一下
    2023-06-06
  • Spring Cloud Gateway动态路由Apollo实现详解

    Spring Cloud Gateway动态路由Apollo实现详解

    这篇文章主要为大家介绍了Spring Cloud Gateway动态路由通过Apollo实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • SpringBoot如何读取resources目录下的文件

    SpringBoot如何读取resources目录下的文件

    这篇文章主要介绍了SpringBoot如何读取resources目录下的文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • SpringMVC+Spring+Mybatis实现支付宝支付功能的示例代码

    SpringMVC+Spring+Mybatis实现支付宝支付功能的示例代码

    这篇文章主要介绍了SpringMVC+Spring+Mybatis实现支付宝支付功能的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Java Floyd算法求有权图(非负权)的最短路径并打印

    Java Floyd算法求有权图(非负权)的最短路径并打印

    这篇文章主要介绍了Java Floyd算法求有权图(非负权)的最短路径并打印,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Spring基于Aop实现事务管理流程详细讲解

    Spring基于Aop实现事务管理流程详细讲解

    这篇文章主要介绍了Spring基于Aop实现事务管理流程,事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性,感兴趣想要详细了解可以参考下文
    2023-05-05
  • jackson在springboot中的使用方式-自定义参数转换器

    jackson在springboot中的使用方式-自定义参数转换器

    这篇文章主要介绍了jackson在springboot中的使用方式-自定义参数转换器,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java中split根据"."分割字符串问题举例

    Java中split根据"."分割字符串问题举例

    split表达式其实就是一个正则表达式,* | . ^ 等符号在正则表达式中属于一种有特殊含义的字符,下面这篇文章主要给大家介绍了关于Java中split根据“.“分割字符串问题的相关资料,需要的朋友可以参考下
    2022-10-10

最新评论