在Java中,我有一个文件名字符串。我想用'_'替换所有非法字符,但不包括
a-z
、0-9
、-
、.
和_
。 我尝试了以下代码:但这没有起作用!myString = myString.replaceAll("[\\W][^\\.][^-][^_]", "_");
[a-zA-Z0-9.-]
以外的所有内容。方括号内的^
表示“非”。myString = myString.replaceAll("[^a-zA-Z0-9\\.\\-]", "_");
.
和 -
!我成功让这个正则表达式有效:[^a-zA-Z0-9_\\-\\.]
。 - Erk如果您正在Windows平台上寻找选项,那么您可以尝试以下解决方案,以利用文件名中除"\ /: *? <> |"之外的所有有效字符。
fileName = fileName.replaceAll("[\\\\/:*?\"<>|]", "_");
/\\:*?"<>|
。 - Juribiyan"[\\\\/:*?\"<>|]"
- kevinarpe更加简单易懂
myString = myString.replaceAll("[^\\w.-]", "_");
预定义字符类:
\w
代表一个单词字符:[a-zA-Z_0-9]
filename.matches("^.*[^a-zA-Z0-9._-].*$")
filename = URLEncoder(fileName, "UTF-8")
来处理文件名。这个操作的结果始终是有效的文件名。这也可以使用URLDecoder
来获取原始文件名字符。 - ApollonDigital