我知道其他人已经提到过
String.split,但这是一个仅产生 两个 标记(基本标记和扩展标记)的变体:
String[] tokens = fileName.split("\.(?=[^\.]+$)");例如:
"test.cool.awesome.txt".split("\.(?=[^\.]+$)");产量:
["test.cool.awesome", "txt"]
正则表达式告诉Java在任何时间段前分割,后跟任意数量的非周期,然后是输入结束。只有一个符合此定义的时间段(即 最后一个 时间段)。
从 技术上来讲,正则地说,该技术称为零宽度正向超前。
顺便说一句,如果您想分割路径并使用带正斜杠的路径来获取完整的文件名(包括但不限于点扩展名),
String[] tokens = dir.split(".+?/(?=[^/]+$)");例如:
String dir = "/foo/bar/bam/boozled"; String[] tokens = dir.split(".+?/(?=[^/]+$)"); // [ "/foo/bar/bam/" "boozled" ]

![Java:将文件名分为基础和扩展名[重复] Java:将文件名分为基础和扩展名[重复]](http://www.mshxw.com/aiimages/31/485868.png)
