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
相关产品推荐
相关产品推荐

