一个前同事写的旧案子,有个功能是产生档案供使用者下载,案子跑了几年都相安无事,而突然某笔资料一直是 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/