为什么在路径中应该使用双反斜杠,但在通配符模式中需要使用四个反斜杠?

3

如果我想在Java中创建Path实例,我应该写出类似以下的代码:

Paths.get("D:\\dir1\\dir2\\dir3");

因此我应该使用双反斜杠

同时我也可以使用单斜杠

Paths.get("D:/dir1/dir2/dir3");

如果我想写GLOB模式,有以下几种变体:

FileSystems.getDefault().getPathMatcher("glob:D:/dir1/dir2/**");

或者
FileSystems.getDefault().getPathMatcher("glob:D:\\\\dir1\\\\dir2\\\\**");

我不理解这个转义魔法,请您解释一下。

2个回答

2
原因是,\ 在许多编程语言中用于指定转义字符。但是不包括/
例如:
\n = 换行
\t = 制表符
以及 \\ = \ 为了在字符串中表示\,必须使用\\。因此,每次使用\\时,它都将被解析为\
编辑:
FileSystems.getDefault().getPathMatcher()中,它需要一个模式。模式也进行解析。为了将D:\dir1\dir2\**表示为预期路径,您必须使用\\而不是\,并且由于它被指定为模式,因此\\的每个\都应该表示为\\\\。因此,最终每个\都表示为\\\\
在此处查找正则表达式以获取更多信息。

2
除非你解释为什么getPathMatcher("glob:D:\\dir1\\dir2\\**");是无效的,否则这个答案并不特别有帮助。 - undefined

1
您知道,在正则表达式中,为了获得一个字面上的反斜杠,需要对反斜杠进行转义:\\ -> '\'。在getPathMatcher()方法中,反斜杠已经被用来转义特殊字符:

反斜杠字符(\)用于转义本应被解释为特殊字符的字符。

所以要产生一个字面上的'\\',您必须转义每个反斜杠,结果是\\\\。令人困惑,不是吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接