Я знаю, що інші згадали 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(..)
методи.