文件路径化简

来源:互联网 发布:js常用正则表达式 编辑:程序博客网 时间:2024/05/21 16:43
 

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".
分析:利用栈来化简。
遇到/和/.不入栈,遇到/..出栈,其他入栈
Stack<String> stk = new Stack<String>();    static final String DOUBLEDOT = "..";    static final String SINGLEDOT = ".";    static final String EMPTY = "";    public String simplifyPath(String path) {        int i = 0, j = 0;        while ((i = j) != -1) {            j = path.indexOf('/', i + 1);            String s = path.substring(i, j == -1 ? path.length() : j);            processPath(stk, s);            if (j == -1) break;        }        StringBuilder res = new StringBuilder();        while (!stk.isEmpty()) {            res.insert(0, stk.peek());            stk.pop();        }        return res.toString().isEmpty()?"/":res.toString();    }    public void processPath(Stack<String> stk, String s) {        if (s.equals("/" + SINGLEDOT) || s.equals("/")) {        } else if (s.equals("/" + DOUBLEDOT)) {            if (!stk.isEmpty())                stk.pop();        } else {            stk.push(s);        }


0 0