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替换圆括号内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java字符串的替换replace、replaceAll、replaceFirst的区别说明

    目录 字符串的替换replace.replaceAll.replaceFirst区别 不多解释,看代码 replaceAll.replaceFirst使用需要注意的问题 类型定义如下 如果我们这样写 我实现了这两个方法,大家可以直接引用 字符串的替换replace.replaceAll.replaceFirst区别 如果不是刚刚复习了下正则表达式,我可能也不会注意到,原来String的replaceAll跟replaceFirst用到了正则表达式! 不多解释,看代码 String s = "my

  • 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 = "

  • java中的 toString()方法实例代码

    前言: toString()方法 相信大家都用到过,一般用于以字符串的形式返回对象的相关数据. 最近项目中需要对一个ArrayList<ArrayList<Integer>> datas  形式的集合处理. 处理要求把集合数据转换成字符串形式,格式为 :子集合1数据+"#"+子集合2数据+"#"+....+子集合n数据. 举例: 集合数据 :[[1,2,3],[2,3,5]]  要求转成为 "[1,2,3]#[2,3,5]"

  • Java中覆盖finalize()方法实例代码

    本文研究的主要是Java中关于覆盖finalize()方法的一次尝试,具体实现如下. 测试代码 package com.alioo.gc; /** * 执行结果: * */ public class FinalizeEscapeGC{ public static FinalizeEscapeGC instance=null; public void isAlive(){ System.out.println("yes,i am still alive"); } @Override pr

  • java中stack(栈)的使用代码实例

    java中stack类继承于vector,其特性为后进先出(lastinfirstout). 入栈和出栈实例图: 实例图的java代码实例: package com.lanhuigu.java.ListTest; import java.util.Stack; public class StackTest { public static void main(String[] args) { Stack<String> staffs = new Stack<String>(); //

  • Java中io流解析及代码实例

    IO流 Java中IO流分为两种,字节流和字符流,顾名思义字节流就是按照字节来读取和写入的,字符刘是按照字符来存取的:常用的文件读取用的就是字符流,在网络通信里面用的就是字节流 下面这张图是Java中IO流的总体框架: 字节流 Java中字节流一般都是以stream结尾的,输入的字节流叫InputStream,输出字节流叫OutputStream;InputStream和OutputStream是表示自己输入/输出的所有类的超类,是抽象类(abstract) 常用的字节流有: 1.FileInp

  • Java实现中序表达式的实例代码

    什么是中序表达式 前序(前缀)表达式要求每一个操作符出现在其操作数之前.一般不用. 写表达式的后序表达式一般是为了便利于计算机编程中栈的实现,所以用的较多. 具体代码如下所示: package 表达式求值; import java.util.Stack; /* * 中序表达式求值实现 */ public class CenterExpression { public double evaluate(String expression){ //传入中序表达式 char [] ex = expres

  • C#与Java的MD5简单验证(实例代码)

    C#端 using System; using System.IO; using System.Security.Cryptography; namespace 计算文件的MD5值 { class MD5_Helper { /// <summary> /// 文件MD5校验 /// </summary> /// <param name="pathName">文件绝对路径</param> /// <returns>MD5校验码&

  • Java 中This用法的实例详解

     Java 中This用法的实例详解 用类名定义一个变量的时候,定义的只是一个引用,外面可以通过这个引用来访问这个类里面的属性和方法. 那们类里面是够也应该有一个引用来访问自己的属性和方法纳? 呵呵,Java提供了一个很好的东西,就是 this 对象,它可以在类里面来引用这个类的属性和方法.先来个简单的例子: public class ThisDemo { String name="Mick"; public void print(String name){ System.out.pr

  • java 中自定义OutputFormat的实例详解

    java 中 自定义OutputFormat的实例详解 实例代码: package com.ccse.hadoop.outputformat; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apa

  • Java中的动态和静态编译实例详解

    Java中的动态和静态编译实例详解 首先,我们来说说动态和静态编译的问题. Q: java和javascript有什么区别?    总结了一下:有以下几点吧: 1.首先从运行环境来说java代码是在JVM上编译成class文件,而javascript则直接在浏览器上加载运行. 2.由第一点可看出,java代码需要编译,而javascript不需要编译. 3.从语言性质来说,java是一种高级编程语言,对变量检查要求严格,javascript只是一个简单的解释性的脚本语言,对变量检查及要求很弱.

随机推荐