来自 Java 教程:http ://docs.oracle.com/javase/tutorial/essential/io/pathOps.html
以下示例都包括冗余:
/home/./joe/foo
/home/sally/../joe/foo
normalize 方法删除任何冗余元素,其中包括任何“.”。或“目录/..”出现。前面的两个示例都归一化为:
/home/joe/foo
两条“冗余”路径指向哪里,如何像这样“规范化”?
来自 Java 教程:http ://docs.oracle.com/javase/tutorial/essential/io/pathOps.html
以下示例都包括冗余:
/home/./joe/foo
/home/sally/../joe/foo
normalize 方法删除任何冗余元素,其中包括任何“.”。或“目录/..”出现。前面的两个示例都归一化为:
/home/joe/foo
两条“冗余”路径指向哪里,如何像这样“规范化”?
首先,.表示当前目录并..表示上一个目录。在
/home/./joe/foo
.指向 /home,因为在该上下文中当前目录是“家”。作为另一个例子,这些是相同的
/foo/././././.
/foo
在
/home/sally/../joe/foo
/sally/.. 是多余的。这就像说,“进入这个目录,然后退后一步”。与此相同:
/home/joe/foo
“路径”这个名字比你想象的更直接。如果您将文件系统视为以 为根的树/,那么每个路径元素都代表您向下走时的选择,远离根。 /home/joe/foo方法
homehome去joejoe去foo路径的/home/sally/../joe/foo意思
homehome去sally..)homehome去joejoe去foo因此,您可以看到两条路径将您带到同一个地方。
单个点表示“留在同一个地方”. ,因此可以删除由 组成的路径元素。
您可以拆分路径 wrt "/" 并在此之后进行处理。
String[] arr = path.split("/");
for(int i = 0; i < arr.length; i++){
if(arr[i].equals("."))
arr[i] = "";
else if(arr[i].equals("..")){
boolean changed = false;int j = i - 1;
while(arr[j].equals(""))
j--;
if(j >= 0)
arr[j] = "";
}
}
这将删除多余的元素,然后再次组合数组。