简化路径
给定一个文档 (Unix-style) 的完全路径,请进行路径简化。
例如,
path = “/home/” => “/home”
path = “/a/./b/…/…/c/” => “/c”
path = “/a/./b/…/c/” => “/a/c”
边界情况:
- 你是否考虑了 路径 = “/…/” 的情况?
在这种情况下,你需返回 “/” 。 - 此外,路径中也可能包含多个斜杠 ‘/’ ,如 “/home//foo/” 。
在这种情况下,你可忽略多余的斜杠,返回 “/home/foo” 。
思路+代码+注释:
public class SevenOne {
public static void main(String[] args) {
System.out.print(simplifyPath(\"//\"));
}
public static String simplifyPath(String path) {
/*
思路:
添加一个例子: path = \"/a/./b/../c/\" => \"/a/c\"
根据三个例子和边界情况可以总结出规律:
使用集合记录需要记录的字符串,整个路径可以看成是用/分隔开的字符串数组,分割后的字符串数组如果字符串是.那么不记录;
如果是..那么该..不记录并且移除集合中记录的最后一个字符串;最后将集合中的字符串都拼接起来
*/
String[] pathStrs=path.split(\"/\");
//说明字符串只有/或者//
if (pathStrs.length==0)
{
return \"/\";
}
//使用集合记录可以保留的字符串
List<String> resList=new ArrayList<>();
for (int i = 0; i < pathStrs.length; i++) {
//字符串不是.
if (!pathStrs[i].equals(\".\"))
{
//字符串不是\"\"
if (!pathStrs[i].equals(\"\"))
{
if (pathStrs[i].equals(\"..\"))
{
if (resList.size()>0)
{
resList.remove(resList.size()-1);
}
}else {
resList.add(\"/\"+pathStrs[i]);
}
}
}
}
//记录集合中没有字符串,说明路径中没有字母,返回/
if (resList.size()==0)
{
return \"/\";
}
StringBuilder res=new StringBuilder();
for (String str:resList
) {
res.append(str);
}
return res.toString();
}
}
继续阅读与本文标签相同的文章
-
Mybatis之discriminator(鉴别器)详解
2026-05-18栏目: 教程
-
前端进阶|第十一天 当全局变量,块变量,函数叫了同一个名字。。
2026-05-18栏目: 教程
-
Leetcode 542:01 矩阵 01 Matrix
2026-05-18栏目: 教程
-
LeetCode 733: 图像渲染 flood-fill
2026-05-18栏目: 教程
-
Spring Cloud Alibaba 实战(二) - 关于Spring Boot你不可不知道的实情
2026-05-18栏目: 教程
