Ich weiß, dass andere erwähnt haben String.split
, aber hier ist eine Variante, die nur zwei Token (die Basis und die Erweiterung) ergibt :
String[] tokens = fileName.split("\\.(?=[^\\.]+$)");
Zum Beispiel:
"test.cool.awesome.txt".split("\\.(?=[^\\.]+$)");
Ausbeuten:
["test.cool.awesome", "txt"]
Der reguläre Ausdruck weist Java an, sich auf einen Zeitraum aufzuteilen, auf den eine beliebige Anzahl von Nicht-Zeiträumen folgt, gefolgt vom Ende der Eingabe. Es gibt nur einen Zeitraum, der dieser Definition entspricht (nämlich den letzten Zeitraum).
Technisch Regexisch gesehen wird diese Technik als positiver Lookahead mit der Breite Null bezeichnet .
Übrigens, wenn Sie einen Pfad teilen und den vollständigen Dateinamen einschließlich, aber nicht beschränkt auf die Punktverlängerung erhalten möchten, indem Sie einen Pfad mit Schrägstrichen verwenden,
String[] tokens = dir.split(".+?/(?=[^/]+$)");
Zum Beispiel:
String dir = "/foo/bar/bam/boozled";
String[] tokens = dir.split(".+?/(?=[^/]+$)");
FilenameUtils
. Es hat diegetBaseName(..)
undgetExtension(..)
Methoden.