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

  • Post author:
  • Post category: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 )。

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

—————————

如有不足请留言指正

相互学习,共同进步



版权声明:本文为xhaimail原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。