软件编程
位置:首页>> 软件编程>> java编程>> java中replaceAll替换圆括号实例代码

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
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com