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.mzph.cn/pingmian/23881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

海南聚广众达电子商务咨询有限公司引领抖音电商新风尚

在数字化浪潮汹涌澎湃的今天&#xff0c;电商行业正迎来前所未有的发展机遇。作为电商领域的一颗璀璨明星&#xff0c;海南聚广众达电子商务咨询有限公司凭借其专业的抖音电商服务&#xff0c;成功吸引了众多商家的目光&#xff0c;成为了业界的一匹黑马。 海南聚广众达电子商…

如何成功申请消防设施工程乙级资质?关键步骤详解

1. 自我评估与准备 条件核对&#xff1a;首先确认企业是否满足乙级资质的注册资本、技术团队、工程经验等硬性要求。团队组建&#xff1a;确保拥有足够数量且符合条件的专业技术人员&#xff0c;特别是关键岗位如主要技术负责人、注册消防工程师等。资料收集&#xff1a;提前准…

【全开源】CRM管理客户关系系统源码

CRM&#xff1a;助力企业高效管理客户关系 全面解决企业销售团队的全流程客户服务难题&#xff0c;旨在助力企业销售全流程精细化、数字化管理&#xff0c;全面解决企业销售团队的全流程客户服务难题&#xff0c;帮助企业有效盘活客户资源、量化销售行为&#xff0c;合理配置资…

vue2+elementui,动态生成的表单校验

话不多,先上一段视频,看看是不是你们需要的效果 elementui动态生成表单校验 附上代码 <template><div class"home"><div class"home-box"><!-- <menuHtml></menuHtml> --><div class"home-div"><…

springboot整合ENC加密解密

以redis为例&#xff0c;连数据库、连mq操作也一样 步骤 1: 添加Jasypt依赖 在Maven项目的pom.xml中添加如下依赖&#xff1a; <dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId>…

超长正整数的加法

一、引言 在计算机科学中&#xff0c;整数加法是一个基础且重要的操作。然而&#xff0c;当面对超长正整数&#xff08;即超出计算机内置整数类型表示范围的整数&#xff09;时&#xff0c;传统的整数加法方法便不再适用。超长正整数通常使用字符串或数组来表示&#xff0c;每…

k8s AIOps

k8s AIOps 主要介绍下k8sgpt 官站 github 介绍 k8sgpt 是一个用于扫描Kubernetes集群、诊断和分级问题的工具。它以简单的英语呈现问题&#xff0c;并将站点可靠性工程&#xff08;SRE&#xff09;的经验编码到其分析器中。通过AI丰富问题的解释&#xff0c;k8sgpt帮助提取最…

Android RecycleView触摸事件记录

文章目录 一、前言二、onFilterTouchEventForSecurity三、addOnItemTouchListener四、参考链接 一、前言 在开发中有时候需要对RecycleView的触摸事件进行拦截和处理&#xff0c;RecyclView本身事件比较复杂&#xff0c;直接使用View的事件体系不能完成特定业务。比如区分滑动…

Full Stack Programming Further Web Programming COSC2758

1. Overview (you must read thisfirst) In this assignment, you will develop a Full Stack Web Application to complete the front‐end prototype built from assignment 1. You are required to use the following stacks:  Frontend: ReactJS or ReactTS  Mid…

iOS开发中copy on write

Copy-On-Write&#xff08;写时复制&#xff09;是一种内存管理技术&#xff0c;在iOS开发中被广泛使用。下面是一些常见的使用场景&#xff1a; 不可变对象的复制&#xff1a;当对一个不可变对象执行复制操作时&#xff0c;实际上只会创建该对象的引用计数副本&#xff0c;而不…

沉淀:心灵的宁静之道

在这个信息爆炸的时代&#xff0c;我们常常被繁杂的事务淹没。每日忙碌的工作、应接不暇的社交活动、纷至沓来的琐事&#xff0c;让人难以静下心来。最近&#xff0c;我也深感疲惫和迷茫&#xff0c;仿佛被生活的巨浪推着前行&#xff0c;却无暇思考方向。 沉淀&#xff0c;是一…

【C++】初识C++

【C】初识C 文章概括关键字&#xff08;C98&#xff09;命名空间命名空间的定义命名空间的特性 输入与输出C中的输入输出输入输出的命名空间 缺省参数函数重载引用引用的概念引用的特性引用地使用场景引用做参数引用做返回值 常引用常引用的俩个例子 引用与指针的区别 内联函数…

web端中使用vue3 实现 移动端的上拉滚动加载功能

需要再web端实现上拉加载 纯属web端的东西 类似这样的功能效果 能够在web端实现滚动分页 overflow-y: scroll;首先给这个大盒子 一个 css 样式 支持滚动 再给固定高度 这个盒子里的内容就能立马滚动起来 给这个盒子一个ref 的属性 以及 有原生滚动事件 scroll const handle…

c++ 左右值与引用折叠

C 增加了一个新的类型&#xff0c;右值引用&#xff0c;记作“&&” 左值&#xff1a;是指在内存中有明确的地址&#xff0c;我们可以找到这块地址的数据&#xff08;可取地址&#xff09; 右值&#xff1a;只提供数据&#xff0c;无法找到地址&#xff08;不可取地址&…

分布式防止重复请求或者高并发防止重复提交

1&#xff1a;自定义注解JRepeat package com.huan.study.mybatis.config;import java.lang.annotation.*;/*** 防止重复提交的注解**/ Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD}) Documented public interface JRepeat {/*** 超时时间** return*/int …

通过龙讯旷腾PWmat发《The Journal of Chemical Physics》 :基于第一性原理分子动力学热力学积分的离子溶剂化自由能计算

背景导读 离子溶解是电化学中一个重要的过程。电化学反应中许多重要的参数&#xff0c;例如电化学还原电位、无限稀释活度系数、亨利定律溶解常数和离子溶解度等&#xff0c;都与离子的溶剂化能有关。然而&#xff0c;由于测量技术和数据处理的困难&#xff0c;离子溶剂化能的…

vCenter7.0安装部署

vCenter7.0安装部署 一、准备环境二、创建新的虚拟机1.创建虚拟机2.第3-5步可直接默认安装并同意许可协议。3.其他设置4.第一阶段直接点完成即可 三、进入第二阶段安装&#xff08;输入ip&#xff1a;5480进入安装界面&#xff09; 一、准备环境 准备一台exsi&#xff0c;并登…

【定义动态组件】

利用动态组件可以动态切换页面中现实的组件&#xff0c;使用标签可以定义动态组件&#xff0c;语法格式如下。 <component is "要渲染的组件"></component>在上述语法中&#xff0c;标签必须配合is属性一起使用&#xff0c;is属性属性值表示要渲染组件&…

MySQL之查询性能优化(九)

查询性能优化 MySQL查询优化器的局限性 UNION的限制 有时&#xff0c;MySQL无法将限制条件从外层"下推"到内层&#xff0c;这使得原本能够限制部分返回结果的条件无法应用到内层查询的优化上。如果希望UNION的各个子句能够根据LIMIT只取部分结果集&#xff0c;或者…

项目沟通管理

目录 1.概述 2.项目沟通的重要性和必要性 2.1.项目沟通的重要性 2.2.项目沟通的必要性 2.3.具体措施 3.三个过程 3.1.规划沟通管理 3.2.管理沟通 3.3.监督沟通 3.4.对应过程组 4.应用场景 4.1.十个应用场景 4.2.新产品开发项目需要与多个部门协调沟通 5.总结 1.概…