像下圖中字段值里帶有反斜杠的記錄:
這種如果要查詢的話,必須使用3個反斜杠才能查到,比如 like ”%D\%“ 是查不到上面兩條記錄的,必須使用 like ”%D\\\%“ ,原因是反斜線符號會被語法分析程序剝離一次,在進行模式匹配時,又會被剝離一次,最后會剩下一個反斜線符號接受匹配。
那么在前端查詢框中輸入 ”D\“ ,提交到action后,action需要將反斜杠替換為三個反斜杠,而字符串 ”D\“ 在java中接收到時是有兩個反斜杠的,因為反斜杠在java中需要加一個反斜杠轉義為字符,像這個樣子: ”D\\“ 。
那么replace是不是可以寫成這樣呢:str.replace("\\", "\\\\\\") ,兩個替換為6個。
No No No ,這樣子是不行的,因為反斜杠在正則表達式中需要加反斜杠轉義,也就是說雙反斜杠要寫成4個反斜杠,也就是說得改成4個反斜杠替換為12個,感覺好尬呀,太多反斜杠了,下面來看看正確的寫法:
myfileurl = myfileurl.replaceAll("\\\\", "\\\\\\\\\\\\");
服了服了,怕了怕了