关于相对路径和绝对路径:
绝对路径:(唯一的)绝对路径仅有一条
相对路径:从当前所在的位置到指定的位置
详细的引用 :https://blog.csdn.net/u011327334/article/details/50355600
我们通过一个例子来理解
eg: 绝对路径: /a/../../b/../c//.//
我们要先进入a目录 然后退回到根目录......这自然而然就想到了栈的使用
好,栈,先将a目录压入栈中,遇到..,要返回,那就弹栈,栈又空了,又到了根目录,再..,根目录已经无法再退,然后进入b目录......
总结:1)当”.“表示当前目录,不做处理;
2)当”…"表示上一级目录,栈不为空时出栈,栈空时不做处理
3)其他情况统统入栈。
代码实现:
/*
* 利用栈
* 首先利用/号对数组进行分割
* 当为.时不管
* 当为..时,出栈
* 其他的情况入栈
*/
public String simplifyPath(String path) {
Stack<String> stack=new Stack<>();//创建栈
String[] split = path.split("/");//按照/划分
if(split.length==0) return "/";//如果传入的只有"/"的话那么就返回"/"
for(int i=1;i<split.length;i++) {
String s=split[i].replaceAll(" ","");//替换
if(!s.equals("")&&!s.equals(".")) {
if(s.equals("..")&&!stack.isEmpty()){ //遇到..就要弹栈并且栈不为空
stack.pop();
}else if(s.equals("..")&&stack.isEmpty()){
continue;
}else {
stack.push(s);
}
}
}
if(stack.isEmpty()) {
return "/";
}
String s="";
while(!stack.isEmpty()) {
s="/"+stack.pop()+s;
}
return s;
}