JAVA分割字符串时前后追加引号

在构建自定义SQL查询时,遇到字符串类型数据在IN语句中缺少引号导致查询失败的问题。本文通过Java代码示例展示了两种方法为字符串添加引号,确保SQL语法正确。第一种方法是先拼接字符串再替换特定字符,第二种方法是直接在映射过程中添加引号。通过这两种方式,可以有效解决SQL IN查询字符串类型的值需加引号的困扰。
摘要由CSDN通过智能技术生成

分享知识 传递快乐

在做自定义 SQL IN 查询时,内容条件是字符串类型,直接放到 IN 中时字符串不带引号,导致 SQL 查询失败。主要为了解决 SQL IN 查询时给字符串类型的值加上引号。

代码

public static void main(String[] args) {
    Set set = new HashSet();

    set.add("O20211221-0029");
    set.add("O20211221-0021");
    set.add("O20211221-0022");
    set.add("O20211221-0023");

    //> 方法一
    // 将集合做分割
    String join = StrUtil.join(",", set);
    System.out.println(join);

    // 字符串替换
    join = join.replaceAll("\\b", "'");
    System.out.println(join);


    //> 方法二
    // 将集合做分割
    join = String.valueOf(set.stream().collect(Collectors.joining(",")));
    System.out.println(join);

    // 字符串替换
    join = String.valueOf(set.stream().map(item -> "'" + item + "'").collect(Collectors.joining(",")));
    System.out.println(join);
}

输出结果

O20211221-0029,O20211221-0023,O20211221-0021,O20211221-0022
'O20211221'-'0029','O20211221'-'0023','O20211221'-'0021','O20211221'-'0022'
O20211221-0029,O20211221-0023,O20211221-0021,O20211221-0022
'O20211221-0029','O20211221-0023','O20211221-0021','O20211221-0022'


 


补充说明

JDK API 中介绍 replaceAll(String regex, String replacement) 是用给定的替换替换与给定的 regular expression 匹配的此字符串的每个子字符串。 

反斜杠字符( '\' )用于引入如上表中定义的转义结构,以及引用否则将被解释为未转义结构的字符。 因此,表达式\\匹配单个反斜杠, \{匹配左括号。 

在任何不表示转义构造的字母字符之前使用反斜杠是一个错误; 这些保留用于将来的正则表达式语言的扩展。 反斜杠可以在非字母字符之前使用,而不管该角色是否是未转义构造的一部分。 

Java 源代码中的字符串文字中的反斜杠将按照 The Java™ Language Specification 的要求被解释为 Unicode 转义或其他字符转义。因此,有必要在表示正则表达式的字符串文字中加上反斜杠,以保护它们免受由 Java 字节码编译器解释。 例如,字符串文字 "\b" 在解释为正则表达式时匹配单个退格字符,而 "\\b" 与字边界匹配。 字符串字面值 "\(hello\)" 是非法的,并导致编译时错误; 为了匹配字符串(hello) ,必须使用字符串文字 "\\(hello\\)" 。 

行终止符是一个或两个字符的序列,用于标记输入字符序列的一行的末尾。 以下内容被识别为线路终端器: 

  • 换行符(换行)字符( '\n' ), 
  • 一个回车符,紧跟着一个换行符( "\r\n" ), 
  • 独立回车字符( '\r' ), 
  • 下一行字符( '\u0085' ), 
  • 行分隔符( '\u2028' )或 
  • 段落分隔符( '\u2029 )。

默认情况下,正则表达式^和$忽略行终止符,仅分别在整个输入序列的开头和结尾进行匹配。 如果MULTILINE模式被激活,则^在输入开始和任何行终止符之后匹配,除了输入结束。 当在MULTILINE模式$匹配之前一个行终止符或输入序列的结尾。 

 —————————
如有不足请留言指正
相互学习,共同进步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旷野历程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值