当前位置: 首页 > news >正文

JAVA学习-练习试用Java实现“简化路径”

问题:

给定一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请将其转化为更加简洁的规范路径。

在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。

请注意,返回的 规范路径 必须遵循下述格式:

始终以斜杠 '/' 开头。
两个目录名之间必须只有一个斜杠 '/' 。
最后一个目录名(如果存在)不能 以 '/' 结尾。
此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 '.' 或 '..')。
返回简化后得到的 规范路径 。

示例 1:

输入:path = "/home/"
输出:"/home"
解释:注意,最后一个目录名后面没有斜杠。 
示例 2:

输入:path = "/../"
输出:"/"
解释:从根目录向上一级是不可行的,因为根目录是你可以到达的最高级。
示例 3:

输入:path = "/home//foo/"
输出:"/home/foo"
解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。
示例 4:

输入:path = "/a/./b/../../c/"
输出:"/c"

提示:

1 <= path.length <= 3000
path 由英文字母,数字,'.','/' 或 '_' 组成。
path 是一个有效的 Unix 风格绝对路径。

解答思路:

以下是使用 Java 语言实现简化路径问题的示例代码:

import java.util.Stack;public class SimplifyPath {public String simplifyPath(String path) {String[] components = path.split("/");Stack<String> stack = new Stack<>();for (String component : components) {if (component.isEmpty() || component.equals(".")) {// 忽略空字符串和当前目录(.)continue;} else if (component.equals("..")) {// 切换到上一级目录(..),若栈不为空,则弹出栈顶元素if (!stack.isEmpty()) {stack.pop();}} else {// 添加其他目录到栈中stack.push(component);}}StringBuilder result = new StringBuilder();while (!stack.isEmpty()) {String component = stack.pop();result.insert(0, component + (stack.isEmpty()? "" : "/"));}return "/" + result.toString();}public static void main(String[] args) {String path = "/home/../a/b/../c";SimplifyPath simplifyPath = new SimplifyPath();String simplifiedPath = simplifyPath.simplifyPath(path);System.out.println("简化后的路径:" + simplifiedPath);}}

该代码首先使用'split("/")'方法将路径按照'/'分割成多个组件,然后遍历这些组件。如果组件是空字符串、当前目录(.)或上一级目录(..)且栈不为空,则进行相应的处理。否则,将非空且非特殊目录的组件添加到栈中。最后,通过从栈中弹出组件并按照逆序拼接的方式构建简化后的路径。在'main'方法中,对示例路径进行简化并输出结果。

(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)

http://www.lryc.cn/news/365748.html

相关文章:

  • STM32——ADC篇(ADC的使用)
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • 深度评价GPT-4o:探索人工智能的新里程碑
  • Linux命令篇(六):vi/vim专项
  • Java 还能不能继续搞了?
  • 【日记】遇到了一个很奇怪的大爷(845 字)
  • Python 机器学习 基础 之 处理文本数据 【处理文本数据/用字符串表示数据类型/将文本数据表示为词袋】的简单说明
  • GAT1399协议分析(10)--视频定义及解析
  • 【C语言】学生管理系统:完整模拟与实现
  • pypi 发布自己的包
  • 关闭windows11磁盘地址栏上的历史记录
  • DDS自动化测试落地方案 | 怿星科技携最新技术亮相是德科技年度盛会
  • 新品!和芯星通全系统全频高精度板卡UB9A0首发
  • Cognita RAG:模块化、易用与可扩展的开源框架
  • linux虚拟机免密登录配置
  • Qt_C++ RFID网络读卡器Socket Udp通讯示例源码
  • C++ 实现Python 列表list 的两种方法
  • vue3+ elementPlus PC端开发 遇到页面已进入就form校验了的问题
  • transformers DataCollator介绍
  • rust学习(字节数组转string)
  • Docker:技术架构演进
  • 汽车MCU虚拟化--对中断虚拟化的思考(2)
  • python的继承
  • 组件的注册和引用
  • 诊所如何赢得患者?做好这两点很关键!
  • Qwen2本地部署的实战教程
  • html+CSS+js部分基础运用15
  • 从零开始学JAVA
  • MySQL(四)查询
  • 嵌入式学习——网络编程(TCP)——day31