天天看点

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

分享知识 传递快乐

在做自定义 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 )。