Given an absolute path for a file (Unix-style), simplify it.
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"
Xpath 是选择XML文件中节点的方法: node(节点) 就是XML文件中最小构成单位,一共分成7种
1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|
element | attribute | text | namespace | processing-instruction | comment | root |
元素 | 属性 | 文本 | 名称空间 | 处理命令 | 注释节点 | 根节点 |
# 斜杠(/)作为路径内部的分割符。
# 同一个节点有绝对路径和相对路径两种写法。
# 绝对路径(absolute path)必须用"/"起首,后面紧跟根节点,比如/step/step/...。
# 相对路径(relative path)则是除了绝对路径以外的其他写法,比如 step/step,也就是不使用"/"起首。
# "."表示当前节点。
# ".."表示当前节点的父节点
使用spli('/'))切割字符串,如/a/./b/../../c/切割为:['a','.','b','..','.','c','']
,然后就好办了。使用一个栈来存储路径,然后遇到['.','']就跳过去,遇到'..'就将栈的最近元素弹出。
class Solution {
public String simplifyPath(String path) {
Stack<String> stack = new Stack<>();
for(String dir:path.split("/")) {
if("..".equals(dir)) {
if(!stack.isEmpty())
stack.pop();
} else if(".".equals(dir)) {
continue;
} else {
if(!"".equals(dir)) {
stack.push(dir);
}
}
}
String r = "";
for(String dir:stack) {
r = r + "/" + dir;
}
return "".equals(r)?"/":r;
}
}
用split函数,以及一个stack栈的运用