【问题标题】:How can I change the invalid characters to valid chars in Java?如何在 Java 中将无效字符更改为有效字符?
【发布时间】:2015-06-25 08:03:17
【问题描述】:
 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

【问题讨论】:

  • 请说得更具体一些。问题是什么?哪些字符无效?你想让我做什么?如果你只是想将无效字符替换成一些有效字符,你可以使用 replaceAll 例如
  • 我猜这是this SO question的延续。那么,替换应该是什么样子的呢?所有无效字符的_ 字符?
  • 不以空格“”开头,不超过一个“.” , 不以“.”开头不以“.”结尾不是 ? / \ : ;在文件中。是的,例如 stribizhev 用 _ 替换。
  • @kokoko 重复的问题被标记为删除。
  • 不是同一个问题....

标签: java regex


【解决方案1】:

您可以使用这段代码来删除/替换无效字符:

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 个或多个前导空格或点
  • \\.+$ - 匹配最终的 .,出现 1 次或多次(如果您还打算替换尾随空格,请更改为 [. ]+$
  • \\.(?=[^.]*\\.[^.]*$) - 匹配一个 .,后跟一个可选数量的字符和另一个点(因此,保留字符串中的最后一个点)
  • [?\\\\/:;] - 从字面上匹配 ?\/:;

【讨论】:

    猜你喜欢
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 2018-07-28
    • 2010-12-25
    • 2018-10-21
    • 1970-01-01
    相关资源
    最近更新 更多