如何在Java中将无效字符更改为有效字符?

时间:2015-06-25 08:03:18

标签: java regex

 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

1 个答案:

答案 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个或多个前导空格或点
  • \\.+$ - 匹配最终.,一次或多次匹配(如果您还打算替换尾随空格,则更改为[. ]+$
  • \\.(?=[^.]*\\.[^.]*$) - 匹配一个.,后跟一个可选的字符数和另一个点(因此,留下字符串中的最后一个点)
  • [?\\\\/:;] - 按字母顺序匹配?\/:;