Sé que otros han mencionado String.split
, pero aquí hay una variante que solo produce dos tokens (la base y la extensión):
String[] tokens = fileName.split("\\.(?=[^\\.]+$)");
Por ejemplo:
"test.cool.awesome.txt".split("\\.(?=[^\\.]+$)");
Rendimientos:
["test.cool.awesome", "txt"]
La expresión regular le dice a Java que se divida en cualquier período seguido por cualquier número de no períodos, seguido del final de la entrada. Solo hay un período que coincide con esta definición (a saber, el último período).
Técnicamente hablando con expresiones regulares, esta técnica se denomina anticipación positiva de ancho cero .
Por cierto, si desea dividir una ruta y obtener el nombre de archivo completo, incluida, entre otras, la extensión de punto, utilizando una ruta con barras diagonales,
String[] tokens = dir.split(".+?/(?=[^/]+$)");
Por ejemplo:
String dir = "/foo/bar/bam/boozled";
String[] tokens = dir.split(".+?/(?=[^/]+$)");
FilenameUtils
. Tiene los métodosgetBaseName(..)
ygetExtension(..)
.