मुझे पता है कि अन्य लोगों ने उल्लेख किया है String.split, लेकिन यहां एक संस्करण है जो केवल दो टोकन (आधार और विस्तार) देता है:
String[] tokens = fileName.split("\\.(?=[^\\.]+$)");
उदाहरण के लिए:
"test.cool.awesome.txt".split("\\.(?=[^\\.]+$)");
पैदावार:
["test.cool.awesome", "txt"]
नियमित अभिव्यक्ति जावा को किसी भी अवधि पर विभाजित करने के लिए कहती है, जिसके बाद किसी भी गैर-अवधि के बाद इनपुट की समाप्ति होती है। केवल एक अवधि है जो इस परिभाषा से मेल खाती है (अर्थात्, अंतिम अवधि)।
तकनीकी रूप से रेगेक्सिक रूप से, इस तकनीक को शून्य-चौड़ाई सकारात्मक लुकहेड कहा जाता है ।
BTW, यदि आप एक पथ को विभाजित करना चाहते हैं और पूर्ण फ़ाइल नाम प्राप्त करना चाहते हैं, लेकिन डॉट एक्सटेंशन तक सीमित नहीं है, तो स्लैश के साथ पथ का उपयोग करते हुए,
String[] tokens = dir.split(".+?/(?=[^/]+$)");
उदाहरण के लिए:
String dir = "/foo/bar/bam/boozled";
String[] tokens = dir.split(".+?/(?=[^/]+$)");
FilenameUtils। इसकेgetBaseName(..)औरgetExtension(..)तरीके हैं।