मैं यहां केवल समाधान देखता हूं लेकिन समस्या का कोई पूर्ण विवरण नहीं है इसलिए मैंने इस उत्तर को पोस्ट करने का निर्णय लिया
संकट
आपको कुछ चीजों के बारे में जानने की जरूरत है text.split(delim)
। split
तरीका:
- तर्क को नियमित अभिव्यक्ति (रेगेक्स) के रूप में स्वीकार करता है जो परिसीमन का वर्णन करता है जिस पर हम विभाजित करना चाहते हैं,
- यदि पहले
delim
की text
तरह a,b,c,,
(जहां सीमांकक ,
) split
मौजूद है, तो पहले की तरह ["a" "b" "c" "" ""]
ही सरणी बनाएंगे, लेकिन ज्यादातर मामलों में हमें वास्तव में इन अनुगामी खाली तारों की आवश्यकता नहीं होती है क्योंकि यह हमारे लिए उन्हें स्वचालित रूप से हटा भी देता है। तो यह इन खाली तारों के पीछे एक और सरणी बनाता है और इसे वापस करता है ।
आप यह भी पता चला है कि जरूरत डॉट.
है विशेष वर्ण में regex । यह किसी भी चरित्र का प्रतिनिधित्व करता है (लाइन विभाजकों को छोड़कर लेकिन इसे Pattern.DOTALL
ध्वज के साथ बदला जा सकता है )।
तो स्ट्रिंग के लिए जैसे "abc"
अगर हम "."
split
विधि पर विभाजित करेंगे
- सरणी बनाएं जैसे
["" "" "" ""]
,
- लेकिन चूंकि इस सरणी में केवल खाली तार हैं और वे सभी पीछे चल रहे हैं, उन्हें हटा दिया जाएगा (जैसे पिछले दूसरे बिंदु में दिखाया गया है)
जिसका अर्थ है कि हमें रिजल्ट एरे के रूप में मिलेगा []
(बिना तत्वों के, खाली स्ट्रिंग के साथ भी), इसलिए हम इसका उपयोग नहीं कर सकते fn[0]
क्योंकि कोई इंडेक्स 0 नहीं है।
उपाय
इस समस्या को हल करने के लिए आपको बस regex बनाने की आवश्यकता है जो डॉट का प्रतिनिधित्व करेगा। ऐसा करने के लिए हमें उससे बचने की जरूरत है .
। इसे करने के कुछ तरीके हैं, लेकिन सबसे सरल संभवतया उपयोग करके है \
(जो स्ट्रिंग में लिखे जाने की आवश्यकता है "\\"
क्योंकि \
वहां भी विशेष है और दूसरे \
को बच निकलने की आवश्यकता है )।
तो आपकी समस्या का समाधान दिख सकता है
String[] fn = filename.split("\\.");
बक्शीश
आप उस डॉट से बचने के लिए अन्य तरीकों का भी उपयोग कर सकते हैं
- चरित्र वर्ग का उपयोग करना
split("[.]")
- बोली में लपेटकर
split("\\Q.\\E")
Pattern.LITERAL
ध्वज के साथ उचित पैटर्न का उपयोग करना
- या बस का उपयोग करें
split(Pattern.quote("."))
और regex आप के लिए भागने करते हैं।