আমি এখানে কেবলমাত্র সমাধান দেখতে পাচ্ছি তবে সমস্যার পুরো ব্যাখ্যা নেই তাই আমি এই উত্তরটি পোস্ট করার সিদ্ধান্ত নিয়েছি
সমস্যা
আপনার সম্পর্কে কয়েকটি জিনিস জানা দরকার text.split(delim)
। split
পদ্ধতি:
- আর্গুমেন্ট রেগুলার এক্সপ্রেশন (রেজেক্স) হিসাবে গ্রহণ করে যা ডিলিমিটারকে বর্ণনা করে যার উপর আমরা বিভক্ত হতে চাই,
- যদি
delim
শেষে বিদ্যমান text
মত a,b,c,,
(যেখানে বিভেদক হয় ,
) split
প্রথম মত বিন্যাস তৈরি করবে এ ["a" "b" "c" "" ""]
কিন্তু যেহেতু বেশিরভাগ ক্ষেত্রেই আমরা সত্যিই এই trailing খালি স্ট্রিং এটি আমাদের জন্য স্বয়ংক্রিয়ভাবে সরিয়ে ফেলা হবে প্রয়োজন হবে না। সুতরাং এটি খালি স্ট্রিংগুলি অনুসরণ না করে অন্য অ্যারে তৈরি করে এবং এটি ফেরত দেয় ।
এছাড়াও আপনি জানাতে চাই যে প্রয়োজন ডট.
হয় বিশেষ অক্ষর মধ্যে Regex । এটি যে কোনও অক্ষরকে উপস্থাপন করে (লাইন বিভাজক বাদে তবে Pattern.DOTALL
পতাকা দিয়ে এটি পরিবর্তন করা যেতে পারে )।
স্ট্রিং জন্য সুতরাং "abc"
আমরা "."
split
পদ্ধতি বিভক্ত যদি
- অ্যারে তৈরি করুন
["" "" "" ""]
,
- তবে যেহেতু এই অ্যারেটিতে কেবল খালি স্ট্রিং রয়েছে এবং সেগুলি সব পেছনে রয়েছে সেগুলি মুছে ফেলা হবে (যেমন আগের দ্বিতীয় পয়েন্টে দেখানো হয়েছে)
যার অর্থ আমরা ফলাফল খালি অ্যারে হিসাবে পাব []
(কোনও উপাদান ছাড়াই খালি স্ট্রিংও নয়), তাই আমরা ব্যবহার করতে পারছি না fn[0]
কারণ 0 সূচি নেই।
সমাধান
এই সমস্যাটি সমাধান করার জন্য আপনাকে কেবল রেজেেক্স তৈরি করতে হবে যা ডটকে উপস্থাপন করবে। এটি করতে আমাদের এড়াতে হবে .
। এটি করার কয়েকটি উপায় রয়েছে তবে সহজতমটি সম্ভবত এটি ব্যবহার করে হয় \
(যা স্ট্রিংয়ে লেখার প্রয়োজন "\\"
কারণ \
এটি সেখানে বিশেষ এবং এড়াতে অন্য আরেকটি প্রয়োজন \
)।
সুতরাং আপনার সমস্যার সমাধান দেখতে ভাল লাগতে পারে
String[] fn = filename.split("\\.");
বোনাস
আপনি যে বিন্দু মত পলায়ন অন্যান্য উপায় ব্যবহার করতে পারেন
- চরিত্র বর্গ ব্যবহার
split("[.]")
- উদ্ধৃতি এটি মোড়ানো
split("\\Q.\\E")
Pattern.LITERAL
পতাকা সহ সঠিক প্যাটার্ন উদাহরণ ব্যবহার করে
- বা কেবল ব্যবহার করুন
split(Pattern.quote("."))
এবং আপনার জন্য রেগেক্সকে পালাতে দিন।