一個前同事寫的舊案子,有個功能是產生檔案供使用者下載,案子跑了幾年都相安無事,而突然 某筆資料一直是 exception,看 log 為產生檔案失敗,查了一下原因,發現是不合法的檔名,簡單將解法做個記錄筆記
失敗原因
程式會將資料庫的某個欄位做為檔名,但是使用者 key 了「6/7」這樣的字,而檔名是不容許特殊字元的
解決方法
程式碼如下:回傳值就會將特殊字元濾掉了,問題解決
public static String romveSpecialChar(String str) {
String regEx = "\\p{P}|\\p{S}|\\p{Z}";
str = Pattern.compile(regEx).matcher(str).replaceAll("").trim();
return str;
}
簡單說明
使用的是 Java 的正規表示式,大家可能比較看不懂的是 \\p{P}|\\p{S}|\\p{Z}
這是什麼?
\\p{P} 其中的小寫 p 是 property 的意思,表示 Unicode 屬性,大寫 P 表示 Unicode 字符集。
字符集截圖如下
完整說明可以參考:http://www.unicode.org/reports/tr18/