Я знаю, что другие упоминали 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(".+?/(?=[^/]+$)");
FilenameUtils
. Она имеетgetBaseName(..)
иgetExtension(..)
методы.