You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java调用lastIndexOf('\')报未闭合字符字面量错误如何修复

错误原因

Java中的反斜杠\是转义字符,作用是和后面紧跟的字符组合成有特殊含义的转义序列,不能直接当作普通字符使用。
你写的'\'会被编译器解析为:反斜杠转义了后面的单引号,组成转义序列\'(这个序列代表单引号字符本身),此时编译器认为你定义的字符字面量只有一个转义后的单引号,缺少用来闭合的第二个单引号,因此抛出「未闭合字符字面量」错误。
而'.'中的点号是普通字符,不存在转义逻辑,单引号包裹后能被编译器正常识别为完整的字符字面量,所以不会触发同类报错。

修复方案

要表示反斜杠字符本身,需要对反斜杠自身做转义,也就是连续写两个反斜杠,将报错行修改为:

int a = s.lastIndexOf('\\');

\\是Java预定义的转义序列,编译后会被识别为单个反斜杠字符。


额外注意事项

你当前的代码还有两个会影响运行的潜在问题:

  • 可执行Java程序的main方法必须声明String[]类型的入参,否则JVM无法识别程序入口,正确的方法签名为public static void main(String[] args)
  • 当用户输入的内容不含路径分隔符(比如直接输入文件名)、或者文件没有扩展名(路径中不含.)时,lastIndexOf方法会返回-1,此时直接调用substring会抛出字符串索引越界异常,建议增加边界值判断。

修复后的完整可运行代码参考:

import java.util.Scanner;
class File_characteristics
{
    public static void main(String[] args)
    {
        System.out.println("\f"); // 清屏
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the file's path");
        String s = sc.nextLine();
        int a = s.lastIndexOf('\\');
        String b = a == -1 ? "" : s.substring(0,a+1); // 提取文件路径
        int c = s.lastIndexOf('.');
        String d = s.substring(a+1, c == -1 ? s.length() : c); // 提取文件名
        String e = c == -1 ? "" : s.substring(c+1); // 提取扩展名
        System.out.println("Path: "+b);
        System.out.println("File name: "+d);
        System.out.println("Extension: "+e);
    }
}

内容的提问来源于stack exchange,提问作者Bongo Man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 03:39:23