3

Std 66 的“5.2.4. Remove Dot Segments”解释了如何将带.和不带的路径转换..为不带的路径。

IIUC,输入foo/../bar处理如下。

  1. 在第 1 步中,(输入缓冲区,输出缓冲区)被初始化为 ( "foo/../bar", "")
  2. Step 2.E 用于得到 ( "/../bar", "foo")
  3. 步骤 2.C 用于得到 ( "/bar", "")
  4. Step 2.E 用于得到 ( "", "/bar")
  5. 第 2 步循环退出
  6. 根据第 3 步,结果为/bar

输入是相对路径,但输出是绝对路径,这对我来说似乎很奇怪。

在我看来,这可以通过在步骤 1中将 isAbsolute设置为 true 来解决,前提是输入缓冲区以 a 开头/并将步骤 2.C 从

C. 如果输入缓冲区以前缀“/../”或“/..”开头,其中“..”是完整的路径段,则在输入缓冲区中将该前缀替换为“/”并删除来自输出缓冲区的最后一段及其前面的“/”(如果有);否则,

C. 如果输入缓冲区以前缀“/../”或“/..”开头,其中“..”是完整的路径段,则在输入缓冲区中将该前缀替换为“/”并删除输出缓冲区的最后一段及其前面的“/”(如果有),如果不是isAbsolute并且输出缓冲区为空,则从输入缓冲区的前面删除“/”;否则,


我误读了规范吗?由于某种原因我没有看到,这是理想的结果吗?

我将一个要点与我对规范的理解和我提出的“修复”的 Java 实现放在一起。

4

0 回答 0