আমি স্ট্রিংটোকেনাইজারের ধারণাটি পছন্দ করি কারণ এটি অনুমিত।
তবে এটি অপ্রচলিত এবং স্ট্রিং.স্প্লিট দ্বারা প্রতিস্থাপন করে যা বিরক্তিকর স্ট্রিং ফিরিয়ে দেয় [] (এবং সীমানা যুক্ত করে না)।
সুতরাং আমি একটি স্ট্রিংটোকেনাইজারেক্স প্রয়োগ করলাম যা একটি পরিমার্জনীয় এবং স্ট্রিংকে বিভক্ত করতে সত্যিকারের রেজিএক্সএক্স লাগে।
সত্যিকারের রেগএক্সপ্যাক্ট বলতে বোঝায় যে এটি 'চরিত্রের অনুক্রম' নয় যা ডিলিমিটার গঠনের জন্য পুনরাবৃত্তি হয়:
'ও' কেবল 'ও' এর সাথে মেলে এবং ভিতরে দুটি ফাঁকা স্ট্রিং সহ 'ওও' কে তিনটি ডিলিমিটারে বিভক্ত করবে:
[o], '', [o], '', [o]
তবে "অওব" বিভক্ত করার সময় রিজেক্সএফ ও + প্রত্যাশিত ফলাফলটি ফিরে আসবে
[], 'a', [ooo], 'b', []
এই স্ট্রিংটোকেনাইজারেক্স ব্যবহার করতে:
final StringTokenizerEx aStringTokenizerEx = new StringTokenizerEx("boo:and:foo", "o+");
final String firstDelimiter = aStringTokenizerEx.getDelimiter();
for(String aString: aStringTokenizerEx )
{
// uses the split String detected and memorized in 'aString'
final nextDelimiter = aStringTokenizerEx.getDelimiter();
}
এই শ্রেণীর কোডটি জোন স্নিপেটে উপলভ্য ।
একটি কোড-চ্যালেঞ্জ প্রতিক্রিয়ার জন্য যথারীতি (পরীক্ষার কেসগুলির অন্তর্ভুক্ত একটি স্ব-অন্তর্ভুক্ত শ্রেণি), এটি অনুলিপি করুন (একটি 'src / টেস্ট' ডিরেক্টরিতে) এবং এটি চালান । এর প্রধান () পদ্ধতিটি বিভিন্ন ব্যবহারের চিত্র তুলে ধরে।
দ্রষ্টব্য: (২০০৯ এর শেষের দিকে সম্পাদনা)
নিবন্ধটি চূড়ান্ত চিন্তাগুলি: জাভা পাজলার: স্প্লিটিং হায়ারগুলি বিচিত্র আচরণকে ব্যাখ্যা করার জন্য একটি ভাল কাজ করে String.split()।
জোশ ব্লচ এমনকি এই নিবন্ধটির প্রতিক্রিয়াতে মন্তব্য করেছিলেন:
হ্যাঁ, এটি একটি ব্যথা। এফডাব্লুআইডাব্লু, এটি খুব ভাল কারণে করা হয়েছিল: পার্লের সাথে সামঞ্জস্যতা।
যে লোকটি এটি করেছে তারা হলেন মাইক "পাগল" ম্যাকক্লোস্কি, যিনি এখন গুগলে আমাদের সাথে কাজ করেন। মাইক নিশ্চিত করেছে যে জাভার নিয়মিত প্রকাশগুলি 30K পার্ল নিয়মিত প্রকাশের পরীক্ষার প্রত্যেকটিতে কার্যত পাস করেছে (এবং দ্রুত চলেছে)।
গুগলের কমন-লাইব্রেরি পেয়ারাতে একটি স্প্লিটার রয়েছে যা হ'ল:
- ব্যবহার সহজ
- গুগল দ্বারা পরিচালিত (এবং আপনার দ্বারা নয়)
সুতরাং এটি চেক আউট মূল্য হতে পারে। তাদের প্রাথমিক রুট ডকুমেন্টেশন (পিডিএফ) থেকে :
জেডিকে রয়েছে:
String[] pieces = "foo.bar".split("\\.");
এটি সঠিকভাবে কী করতে চাইলে এটি ব্যবহার করা ভাল: - নিয়মিত প্রকাশ - অ্যারে হিসাবে ফলাফল - খালি খণ্ডগুলি হ্যান্ডল করার উপায়
মিনি-পাজল: ", এ, বি,"। স্প্লিট (",") ফিরে আসে ...
(a) "", "a", "", "b", ""
(b) null, "a", null, "b", null
(c) "a", null, "b"
(d) "a", "b"
(e) None of the above
উত্তর: (ঙ) উপরের কোনটিই নয়।
",a,,b,".split(",")
returns
"", "a", "", "b"
কেবল পিছনের শূন্যস্থান এড়িয়ে চলেছে! (এড়িয়ে যাওয়া রোধ করার জন্য কারা কাজটি জানেন? এটি একটি মজাদার ...)
যাইহোক, আমাদের স্প্লিটারটি কেবল আরও নমনীয়: ডিফল্ট আচরণটি সরল:
Splitter.on(',').split(" foo, ,bar, quux,")
--> [" foo", " ", "bar", " quux", ""]
আপনি যদি অতিরিক্ত বৈশিষ্ট্য চান, তাদের জন্য জিজ্ঞাসা করুন!
Splitter.on(',')
.trimResults()
.omitEmptyStrings()
.split(" foo, ,bar, quux,")
--> ["foo", "bar", "quux"]
কনফিগার পদ্ধতিগুলির অর্ডারটি কোনও ব্যাপার নয় - বিভাজনের সময়, খালিগুলি যাচাইয়ের আগে ট্রিমিং হয়।