描述
Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/", => "/home"
Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"
Corner Cases:
• Did you consider the case where path = "/../"? In this case, you should return "/".
• Another corner case is the path might contain multiple slashes '/' together, such as "/home//foo/".
In this case, you should ignore redundant slashes and return "/home/foo".
package String;
import java.util.Vector;
public class SimplifyPath {
public static String Solution(String path){
Vector<String> dirs = new Vector<String>();;
for(int i = 0; i != path.length()-1;){
++i;
int j = path.indexOf("/", i);
if(j == -1){
if(!(path.substring(i).equalsIgnoreCase("..")))
dirs.add(path.substring(i));
break;
}
String dir = path.substring(i,j);
if(!dir.equalsIgnoreCase("") && !dir.equalsIgnoreCase(".")){
if(dir.equalsIgnoreCase("..")){
if(dirs.size() != 0)
dirs.remove(dirs.size()-1);
}else
dirs.add(dir);
}
i = j;
}
String out = "";
if(dirs.size() == 0){
out = "/";
}else{
for(String dir:dirs){
out = out + "/" + dir;
}
}
return out;
}
public static void main(String[] args){
String path = "/../";
String path1 = "/home//foo/";
String path2 = "/home/foo/";
String path3 = "/home/foo";
String path4 = "/home/";
String path5 = "/";
String path6 = "/..";
String path7 = "/a/./b/../../c/";
String path8 = "/a/./b/../c/";
System.out.println(Solution(path));
System.out.println(Solution(path1));
System.out.println(Solution(path2));
System.out.println(Solution(path3));
System.out.println(Solution(path4));
System.out.println(Solution(path5));
System.out.println(Solution(path6));
System.out.println(Solution(path7));
System.out.println(Solution(path8));
}
}