【发布时间】:2019-04-12 16:16:10
【问题描述】:
对于这个字符串dirPath,
String dirPath = "c:/create/a/dir/very/deep/inside/../././../../../dir/";
我希望输出字符串看起来像:
"c:/create/a/dir/very/deep/inside/../../../../dir/";
我用过:
dirPath.replaceAll("/[.]/", "/");
但这给了:
c:/create/a/dir/very/deep/inside/.././../../../dir/
^^^
然后,又尝试了一个replaceAll:
dirPath.replaceAll("/[.]/", "/").replaceAll("/[.]/", "/");
而且成功了!
我的问题是为什么一个电话不能达到相同的结果? 如何以最简单的方式实现?
附:另一个对我不起作用的正则表达式:.replaceAll("($|/)[.]/", "$1")
【问题讨论】:
-
我不知道是否有一种方法可以做,但是当
String包含/./并继续替换它的出现时,一种解决方案可能会循环:/ -
IMO,对于这个简单但一般的任务,使用循环将是多余的。
-
从来没有说过这是个好主意,只是没有更好的解决方案;)
-
为什么需要删除点,而不是对点进行标准化?当然,如果您将这个字符串传递给可以处理两者或两者都不能处理?
-
我将这个转换后的字符串传递给 Java glob 路径匹配器,它将它与文字点进行匹配。这就是为什么转换是绝对必要的。在此处阅读更多信息docs.oracle.com/javase/tutorial/essential/io/fileOps.html#glob