71. 简化路径 —day94

前言:

作者:神的孩子在歌唱

一个算法小菜鸡

大家好,我叫智

image-20250629232423583

71. 简化路径

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

在 Unix 风格的文件系统中规则如下:

  • 一个点 '.' 表示当前目录本身。
  • 此外,两个点 '..' 表示将目录切换到上一级(指向父目录)。
  • 任意多个连续的斜杠(即,'//''///')都被视为单个斜杠 '/'
  • 任何其他格式的点(例如,'...''....')均被视为有效的文件/目录名称。

返回的 简化路径 必须遵循下述格式:

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

返回简化后得到的 规范路径

示例 1:

**输入:**path = “/home/”

输出:“/home”

解释:

应删除尾随斜杠。

示例 2:

**输入:**path = “/home//foo/”

输出:“/home/foo”

解释:

多个连续的斜杠被单个斜杠替换。

示例 3:

**输入:**path = “/home/user/Documents/…/Pictures”

输出:“/home/user/Pictures”

解释:

两个点 ".." 表示上一级目录(父目录)。

示例 4:

**输入:**path = “/…/”

输出:“/”

解释:

不可能从根目录上升一级目录。

示例 5:

**输入:**path = “/…/a/…/b/c/…/d/./”

输出:“/…/b/d”

解释:

"..." 在这个问题中是一个合法的目录名。

提示:

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

思路 : 通过栈进行遍历,有效值才入栈

class Solution {
    // 通过栈进行遍历,有效值才入栈
    // 如何找到有效值:遍历到当前/,下一个/
    public String simplifyPath(String path) {
        // 定义栈
        Deque<String> stack = new ArrayDeque<>();
        int len=path.length();
        for(int i=1;i<len;i++){
            // 如果当前是/就跳过
            if(path.charAt(i)=='/') continue;
            // 否者就开始遍历值,我们这里先循环到下一个/的位置
            int j=i+1;
            while(j<len&&path.charAt(j)!='/') j++;
            // 通过substring切割获取值
            String item=path.substring(i,j);
            // 将i放入到j的位置
            i=j;
            // 如果是..就出栈
            if(item.equals("..")){
                // 如果不为空
                if(!stack.isEmpty()){
                    stack.pollLast();
                }
            }
            // 否则如果item不为.
            else if(!item.equals(".")){
                stack.addLast(item);
            }
        }
        StringBuilder s=new StringBuilder();
        while(!stack.isEmpty()){
            s.append('/'+stack.pollFirst());
        }
        return s.length()==0?"/":s.toString();

    }
}

本人csdn博客:https://blog.csdn.net/weixin_46654114

转载说明:跟我说明,务必注明来源,附带本人博客连接。

<think>我们正在解决一个Java运行时错误:java.lang.ClassNotFoundException,具体找不到的类是`Day6._1Object`。根据引用[1][2][3][4][5]中的信息,这个异常通常表示Java虚拟机在尝试加载指定的类时找不到它。可能的原因包括:1.路径(classpath)配置不正确,导致JVM无法找到类文件。2.类名拼写错误(包括大小写错误)或包路径不正确。3.所需的jar包或依赖项缺失。4.在IDE(如Intellij)中,可能没有正确构建项目,导致类文件没有生成。5.在运行Spark等框架时,可能因为类没有正确分发到工作节点而出现此问题。但是,当前问题中提到的类是`Day6._1Object`,看起来是一个用户自定义类,且问题发生在普通Java程序运行中(非Spark等分布式环境)。解决方案步骤:1.**检查类名和包路径**:确保在运行命令中指定的类名完全正确。注意大小写,因为Java是大小写敏感的。同时,类`Day6._1Object`应该位于包`Day6`下,所以它的全限定名应该是`Day6._1Object`。检查源代码中是否正确定义了包:```javapackageDay6;//确保包名是Day6publicclass_1Object{publicstaticvoidmain(String[]args){//...}}```2.**检查类路径(classpath)**:如果通过命令行运行,确保classpath包含存放`Day6/_1Object.class`文件的目录。例如,如果类文件在`out/production/项目名`(Intellij默认)或`target/classes`(Maven项目)等目录下,那么运行时应指定classpath。假设类文件所在目录是`D:\project\out\production\MyProject`,则运行命令应为:```java-cpD:\project\out\production\MyProjectDay6._1Object```或者,如果当前目录就是类文件所在目录的上级(例如,当前在`D:\project\out\production\MyProject`),可以简化为:```javaDay6._1Object```3.**IDE中运行**:如果在IDE(如Intellij、Eclipse)中运行,确保项目已经正确构建(BuildProject)。在Intellij中,可以尝试:-清理并重建项目(Build->RebuildProject)-检查运行配置(Run/DebugConfigurations)中主类(MainClass)是否设置为`Day6._1Object`-检查模块路径(Modulepath)是否正确4.**检查项目构建情况**:确保类文件确实已经被编译生成。在项目中,找到`Day6`包下是否有`_1Object.class`文件。如果没有,可能是编译失败,需要先修复编译错误。5.**检查依赖项**:如果`_1Object`类依赖了其他jar包,请确保这些jar包已经添加到classpath中。6.**特殊的命名问题**:注意,类名`_1Object`以数字和下划线开头,这在Java中是允许的,但要确保在运行命令中不要拼写错误。7.**其他可能**:参考引用[4]中提到,在Web项目中(如Servlet),有时候需要重启Eclipse和重新部署项目。虽然当前问题不是Web项目,但如果在IDE中遇到类似问题,也可以尝试重启IDE。8.**使用Maven/Gradle构建的项目**:如果项目是使用Maven或Gradle构建的,确保已经正确编译。在命令行中,进入项目根目录,运行`mvncompile`或`gradlebuild`,然后再运行。根据以上步骤,通常可以解决ClassNotFoundException的问题。如果上述步骤仍不能解决,可能需要提供更多关于项目结构和运行方式的信息。§§相关问题§§1.如何正确设置Java路径(classpath)?2.在IntellijIDEA中如何配置运行主类?3.为什么Java运行时找不到主类?</think> ### Java运行时`ClassNotFoundException`解决方案:找不到主类`Day6._1Object` 出现`java.lang.ClassNotFoundException: Day6._1Object`错误时,表明JVM在类路径中找不到指定的类。以下是系统化的解决方案: #### 核心解决步骤: 1. **验证类名与文件路径** - 确认类名`Day6._1Object`是否完全匹配(**大小写敏感**) - 检查类文件物理路径:`项目目录/src/Day6/_1Object.class`或 `bin/Day6/_1Object.class`(对应包路径)[^1] 2. **检查类路径配置** ```bash # 手动运行时添加-classpath参数 java -cp ./bin;./lib/* Day6._1Object ``` - `./bin`:编译后的class文件目录 - `./lib/*`:依赖的JAR包目录 - IDE用户需检查运行配置中的"Classpath"设置(如IntelliJ的`Run/Debug Configurations`)[^2][^4] 3. **清理并重建项目** - 在IDE中执行: ```text Build → Clean Project → Rebuild Project ``` - Maven/Gradle项目执行: ```bash mvn clean install # 或 gradle clean build ``` - 强制重新生成class文件,避免编译残留问题[^4] 4. **验证依赖完整性** - 检查是否缺少必要的依赖JAR(参考引用[5]) - 特别关注非标准类名(如包含特殊字符`_1Object`)是否被构建工具正确处理 5. **文件系统路径排查** - 类文件必须存在于: ```text [classpath根目录]/Day6/_1Object.class ``` - 使用命令检查路径: ```bash find . -name "_1Object.class" # Linux/macOS dir /s /b *_1Object.class # Windows ``` #### 特殊场景处理: - **Spark/大数据应用**:确保类通过`--jars`或`spark-submit --conf`分发到集群[^3] - **Web项目(Servlet)**:检查`WEB-INF/classes`目录结构,重启服务并重新部署[^4] - **JSON解析场景**:确认`commons-lang`等依赖包完整(参考引用[5]) > **关键提示**:此错误95%由类路径配置错误引起。使用`System.getProperty("java.class.path")`可打印当前类路径[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神的孩子都在歌唱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值