private static void isValidName(String[] filename){
FileSystem fs = FileSystems.getDefault();
System.out.println(fs);
String pattern = ("^[\\w&[^?\\\\/. ]]+?\\.*[\\w&[^?\\\\/. ]]+$");
for (String s: filename) {
//System.out.println(s.matches(pattern));
if (s.matches(pattern)==false){
System.out.println(s.matches(pattern));
}
}
现在我调用这个函数:
String[] name2={"valami.txt."};
isValidName(name2);
如何使用有效字符替换if(s.matches(pattern)==false)
中的无效字符?
输出:
false
答案 0 :(得分:2)
您可以使用这段代码删除/替换无效字符:
String[] bad = {
"foo.tar.gz",
" foo.txt",
"foo?",
"foo/",
"foo\\",
".foo",
"foo."
};
String remove_pattern = "^[ .]+|\\.+$|\\.(?=[^.]*\\.[^.]*$)|[?\\\\/:;]";
for (String s: bad) {
System.out.println(s.replaceAll(remove_pattern, "_"));
}
请参阅IDEONE demo
输出:
foo_tar.gz
_foo.txt
foo_
foo_
foo_
_foo
foo_
REGEX 包含与|
轮换运算符相关联的多个备选项,以仅匹配无效字符。
^[ .]+
- 匹配1个或多个前导空格或点\\.+$
- 匹配最终.
,一次或多次匹配(如果您还打算替换尾随空格,则更改为[. ]+$
)\\.(?=[^.]*\\.[^.]*$)
- 匹配一个.
,后跟一个可选的字符数和另一个点(因此,留下字符串中的最后一个点)[?\\\\/:;]
- 按字母顺序匹配?
,\
,/
,:
和;
。