来自 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
方法
home
home
去joe
joe
去foo
路径的/home/sally/../joe/foo
意思
home
home
去sally
..
)home
home
去joe
joe
去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] = "";
}
}
这将删除多余的元素,然后再次组合数组。