以下方法都是笔者用过以及踩过坑的,欢迎补充
这个是测试的字符串:
String data = “测试文件.doc.exe”;
System.out.println("方法1 结果: "+ data.substring(data.lastIndexOf(".")));
System.out.println("方法2 结果: "+ data.split("\\.")[data.split("\\.").length-1]);

tips: 有时有可能接收到不规范的文件名,比如:
String data=“测试文件”;
此时,方法1就不适用了会报错 java.lang.StringIndexOutOfBoundsException: String index out of range: -1
System.out.println("方法1改进 结果: "+ data.substring(data.lastIndexOf(".")+1));

使用这个需要引入依赖,笔者因为还用到了其他的方法所以引入了所有的
cn.hutool hutool-all 5.4.3
示例
System.out.println("方法3-1 结果: "+ FileNameUtil.getSuffix(data));
System.out.println("方法3-2 结果: "+ FileNameUtil.extName(data));

hutool工具类非常丰富
上方面还可以接收 File 参数
System.out.println("方法3-3 结果: "+ FileNameUtil.getSuffix(new File(data)));
System.out.println("方法3-4 结果: "+ FileNameUtil.extName(new File(data)));
结果和上面一样
这个需要使用 apache的依赖
commons-io commons-io 2.4
示例
System.out.println("方法4 结果: "+ FilenameUtils.getExtension(data));

System.out.println("方法5 结果: "+ StringUtils.getFilenameExtension(data));

正则一般需要根据自己的业务来设计