在Java中,我有一個文件名字符串。在那裏,我想,以取代「_」的所有非法字符,但不能a-z
,0-9
,-
,.
和_
替換文件名中的非法字符
我嘗試下面的代碼:但這並沒有工作!
myString = myString.replaceAll("[\\W][^\\.][^-][^_]", "_");
在Java中,我有一個文件名字符串。在那裏,我想,以取代「_」的所有非法字符,但不能a-z
,0-9
,-
,.
和_
替換文件名中的非法字符
我嘗試下面的代碼:但這並沒有工作!
myString = myString.replaceAll("[\\W][^\\.][^-][^_]", "_");
我知道有一直在這裏已經有一些答案,但我想指出的是,我不得不稍微改變給定的建議。
filename.matches("^.*[^a-zA-Z0-9._-].*$")
這是我不得不使用Java中的.matches來獲得所需的結果。我不確定這是否100%正確,但這是它的工作原理,如果它遇到除a-z A-Z 0-9(。)(_)和( - )以外的任何字符,它將返回true。
我想知道我的邏輯在這裏是否有缺陷。
在前面的答案中,我已經看到了一些應該或不應該逃脫的討論。對於這個例子,我逃脫了任何東西,但是你應該逃避( - )減號字符的安全,因爲它會「破壞」你的表達,除非它在列表的末尾。 (。)方括號內的(。)點字符不需要在([])方括號內轉義,但如果你真的逃過它,它不會傷害你。
有關更多詳細信息,請參閱Java Patterns。
更簡單
myString = myString.replaceAll("[^\\w.-]", "_");
預定義字符類:
\w
字字符:[a-zA-Z_0-9]
如果您正在尋找在Windows平臺上的選項,那麼你可以試試下面的解決方案要使用「\ /:*?」以外的所有有效字符<> |「文件名
fileName = fileName.replaceAll("[\\\\/:*?\"<>|]", "_");
如果你想使用像[A-ZA-Z0-9],然後檢查MS Naming Conventions,不要忘記給過濾掉了。」 ......人物其整...「
由於標題更真實的問題,我對這個問題的解決方案是使用'filename = URLEncoder(fileName,」UTF-8「) '這個操作的結果總是一個有效的文件名,這也允許在文件名 – ApollonDigital 2015-09-26 13:33:27
上使用'URLDecoder'獲得原始的文件名字符。沒有保證結果文件名總是有效的。*不是有效的字符。 – 2017-07-24 18:36:55