java replaceAll替换圆括号

2022-07-02 00:00:00 java 替换 圆括号

在手写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)

替换成功。

总结:

         字符替换的时候,优先考虑使用replace,多个时候,也是生效的。如果要使用replace的话,使用要注意特殊字符的处理。或者自己写正则进行处理。

        优化: 《整体替换sql》

    原文作者:天狼1222
    原文地址: https://blog.csdn.net/qq_35461948/article/details/123126296
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章