分享知識 傳遞快樂
在做自定義 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 )。