Başkalarının bahsettiğini biliyorum String.split
, ancak burada yalnızca iki jeton (temel ve uzantı) veren bir varyant var :
String[] tokens = fileName.split("\\.(?=[^\\.]+$)");
Örneğin:
"test.cool.awesome.txt".split("\\.(?=[^\\.]+$)");
Verimler:
["test.cool.awesome", "txt"]
Normal ifade, Java'ya herhangi bir sayıda nokta olmayan dönemlerin ve ardından girdinin sonunun geldiği herhangi bir döneme bölünmesini söyler. Bu tanıma uyan tek bir dönem vardır (yani son dönem).
Teknik olarak Regexical olarak konuşursak, bu tekniğe sıfır genişlikli pozitif bakış açısı denir .
BTW, bir yolu bölmek ve nokta uzantısı dahil ancak bununla sınırlı olmamak üzere tam dosya adını almak istiyorsanız, eğik çizgi içeren bir yol kullanarak,
String[] tokens = dir.split(".+?/(?=[^/]+$)");
Örneğin:
String dir = "/foo/bar/bam/boozled";
String[] tokens = dir.split(".+?/(?=[^/]+$)");
FilenameUtils
. Bu sahiptirgetBaseName(..)
vegetExtension(..)
yöntemler.