天天看點

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 )。