का उपयोग आप डॉट से बचने के लिए की जरूरत है अगर आप एक शाब्दिक डॉट पर विभाजित करना चाहते हैं:
String extensionRemoved = filename.split("\\.")[0];
अन्यथा आप regex .
पर विभाजित हैं, जो का मतलब है "कोई चरित्र"।
रेगेक्स में एक बैकस्लैश बनाने के लिए आवश्यक डबल बैकस्लैश नोट करें।
आप हो रही है एक ArrayIndexOutOfBoundsException
क्योंकि आपके इनपुट स्ट्रिंग केवल एक बिंदु, यानी "."
है, जो एक बढ़त मामले कि एक खाली सरणी जब डॉट पर विभाजित पैदा करता है; split(regex)
परिणाम से सभी पिछला रिक्त स्थान हटा देता है, लेकिन चूंकि एक बिंदु पर एक बिंदु को विभाजित करने से केवल दो रिक्त स्थान निकलते हैं, पीछे के रिक्त स्थान हटा दिए जाने के बाद आपको खाली सरणी के साथ छोड़ दिया जाता है।
इस किनारे के मामले के लिए ArrayIndexOutOfBoundsException
प्राप्त करने से बचने के लिए, split(regex, limit)
के अधिभारित संस्करण का उपयोग करें, जिसमें दूसरा पैरामीटर है जो परिणामी सरणी के लिए आकार सीमा है। जब limit
नकारात्मक है, जिसके परिणामस्वरूप सरणी से अनुगामी रिक्त स्थान को हटाने के व्यवहार अक्षम किया गया है:
".".split("\\.", -1) // returns an array of two blanks, ie ["", ""]
यानी, जब filename
केवल एक बिंदु की "."
, filename.split("\\.", -1)[0]
बुला एक रिक्त वापस आ जाएगी, लेकिन filename.split("\\.")[0]
बुला एक फेंक जाएगा ArrayIndexOutOfBoundsException
।
एक regex स्ट्रिंग का उपयोग विभाजित नहीं करता: इस चरित्र से बचने के लिए? उस स्तिथि में "।" किसी भी चरित्र का मतलब है। – Snps
... और यह सीमित करने के लिए एक डबल बैकस्लैश है। – Ben