"শুভেচ্ছা, আমিগো!"
"হ্যালো, ঋষি!"
"আপনি এখন আকর্ষণীয় কিছু শেখার জন্য স্ট্রিং সম্পর্কে যথেষ্ট জানেন। আরও নির্দিষ্টভাবে, একটি নতুন ক্লাস যা স্ট্রিং ক্লাসের মতো কিন্তু ঠিক একই রকম নয়।"
"কৌতুহলজনক শোনাচ্ছে, যদিও এটি আমার কাছে সম্পূর্ণরূপে পরিষ্কার নয় যে কীভাবে সাধারণ স্ট্রিংগুলি ছোট হয় এবং কেন অন্যান্য স্ট্রিং-এর মতো ক্লাসের প্রয়োজন হয়।"
"আসুন শুরু করা যাক যে স্ট্রিংগুলি জাভাতে অপরিবর্তনীয় বস্তু।"
"সেটা কেমন? আমি ভুলে গেছি... অথবা আমি কখনই শুরু করতে জানতাম না..."
"আমাকে মনে করিয়ে দিই যে অপরিবর্তনীয় বস্তুগুলি হল যেগুলির অবস্থাগুলি তৈরি হওয়ার পরে পরিবর্তন করা যায় না।"
"আহহ... জাভাতে স্ট্রিং অপরিবর্তনীয় কেন?"
"স্ট্রিং ক্লাসকে অত্যন্ত অপ্টিমাইজ করার জন্য এবং এটিকে সর্বত্র ব্যবহার করার অনুমতি দেওয়ার জন্য এটি করা হয়েছিল৷ উদাহরণস্বরূপ, হ্যাশম্যাপ সংগ্রহে কী হিসাবে ব্যবহারের জন্য শুধুমাত্র অপরিবর্তনীয় প্রকারগুলি সুপারিশ করা হয় ৷
"তবে, প্রায়ই এমন পরিস্থিতি তৈরি হয় যখন প্রোগ্রামাররা স্ট্রিং ক্লাসের পরিবর্তনযোগ্য হওয়া আরও সুবিধাজনক বলে মনে করে। তারা এমন একটি শ্রেণী চায় যেটি প্রতিবার যখন তার পদ্ধতিগুলির একটিকে কল করা হয় তখন একটি নতুন সাবস্ট্রিং তৈরি করে না।"
"কিন্তু এটা কিসের জন্য ভালো?"
"আচ্ছা, ধরুন আমাদের একটি খুব বড় স্ট্রিং আছে এবং আমাদের প্রায়শই এর শেষে কিছু যোগ করতে হবে। এই ক্ষেত্রে, এমনকি অক্ষরের একটি সংগ্রহ ( ArrayList<Character>
) ক্রমাগত স্ট্রিং অবজেক্টগুলিকে পুনরায় তৈরি এবং সংযুক্ত করার চেয়ে বেশি দক্ষ হতে পারে।"
"এবং এজন্যই আমাদের এমন স্ট্রিং দরকার যা স্ট্রিং ক্লাস নয়?"
"ঠিকভাবে। জাভা ভাষাতে একটি স্ট্রিং-এর মতো টাইপ যোগ করা হয়েছে যা পরিবর্তন করা যেতে পারে। একে বলা হয় StringBuilder
"।
একটি বস্তু তৈরি করা
"একটি বিদ্যমান স্ট্রিংয়ের উপর ভিত্তি করে একটি বস্তু তৈরি করতে StringBuilder
, আপনাকে একটি বিবৃতি কার্যকর করতে হবে:
StringBuilder name = new StringBuilder(string);
"একটি খালি পরিবর্তনযোগ্য স্ট্রিং তৈরি করতে, আপনাকে এইরকম একটি বিবৃতি ব্যবহার করতে হবে:
StringBuilder name = new StringBuilder();
পদ্ধতির তালিকা
" StringBuilder
ক্লাসে দুই ডজন সহায়ক পদ্ধতি রয়েছে। এখানে সবচেয়ে গুরুত্বপূর্ণ পদ্ধতি রয়েছে:
পদ্ধতি | বর্ণনা |
---|---|
|
পাস করা বস্তুটিকে একটি স্ট্রিং-এ রূপান্তরিত করে এবং বর্তমান স্ট্রিং-এ যুক্ত করে |
|
পাস করা বস্তুটিকে একটি স্ট্রিং-এ রূপান্তর করে এবং বর্তমান স্ট্রিংয়ের মাঝখানে সন্নিবেশ করায় |
|
পাস করা স্ট্রিং দিয়ে start..end ব্যবধান দ্বারা নির্দিষ্ট করা স্ট্রিংয়ের অংশ প্রতিস্থাপন করে |
|
স্ট্রিং থেকে নির্দিষ্ট সূচক সহ অক্ষরটি সরিয়ে দেয় |
|
স্ট্রিং থেকে নির্দিষ্ট ব্যবধানের মধ্যে অক্ষরগুলি সরিয়ে দেয় |
|
বর্তমান স্ট্রিং এ একটি সাবস্ট্রিং অনুসন্ধান করে |
|
শেষ থেকে শুরু করে বর্তমান স্ট্রিং-এ একটি সাবস্ট্রিং অনুসন্ধান করে |
|
পাস করা সূচীতে স্ট্রিংয়ের অক্ষরটি ফেরত দেয় |
|
নির্দিষ্ট ব্যবধান দ্বারা সংজ্ঞায়িত সাবস্ট্রিং প্রদান করে |
|
বর্তমান স্ট্রিং বিপরীত করে। |
|
পাস করা অক্ষরে নির্দিষ্ট সূচকে অক্ষর পরিবর্তন করে |
|
অক্ষরের মধ্যে স্ট্রিং এর দৈর্ঘ্য প্রদান করে |
"এবং এখন আমি সংক্ষেপে আপনাকে এই পদ্ধতিগুলির প্রতিটি বর্ণনা করব।
একটি স্ট্রিং সংযুক্ত করা
"একটি পরিবর্তনযোগ্য স্ট্রিং ( ) এ কিছু যোগ করতে StringBuilder
, append()
পদ্ধতিটি ব্যবহার করুন৷ উদাহরণ:
কোড | বর্ণনা |
---|---|
|
Hi |
একটি স্ট্যান্ডার্ড স্ট্রিং রূপান্তর
StringBuilder
"একটি বস্তুকে স্ট্রিং অবজেক্টে রূপান্তর করতে , আপনাকে কেবল তার toString()
পদ্ধতিতে কল করতে হবে। উদাহরণ
কোড | আউটপুট |
---|---|
|
Hi123 |
আমি কিভাবে একটি অক্ষর মুছে ফেলব?
"একটি পরিবর্তনযোগ্য স্ট্রিং থেকে একটি অক্ষর মুছে ফেলার জন্য, আপনাকে deleteCharAt()
পদ্ধতিটি ব্যবহার করতে হবে৷ উদাহরণ:
কোড | আউটপুট |
---|---|
|
Helo |
আমি কিভাবে একটি স্ট্রিং এর অংশ অন্য স্ট্রিং দিয়ে প্রতিস্থাপন করব?
"এর জন্য পদ্ধতি আছে replace(int begin, int end, String str)
। উদাহরণ:
কোড | আউটপুট |
---|---|
|
MeHello!w |
"সুবিধে লাগছে। ধন্যবাদ, ঋষি।"
"এটা উল্লেখ করবেন না। এটা কি করে, আপনি কি একটি স্ট্রিংকে পিছনের দিকে ফ্লিপ করতে পারেন? আপনি কীভাবে এটি করবেন?"
"আচ্ছা... আমি একটি তৈরি করব StringBuilder
, এতে একটি স্ট্রিং রাখব... তারপর একটি নতুন স্ট্রিং তৈরি করব, এবং শেষ অক্ষর থেকে প্রথমটিতে একটি লুপে... অথবা হতে পারে একটি বিটওয়াইজ শিফট...
"খারাপ নয়। তবে এটি দ্রুততর হতে পারে। এটি করার জন্য একটি বিশেষ পদ্ধতি আছে — reverse();
উদাহরণ:
কোড | আউটপুট |
---|---|
|
olleH |
" StringBuilder
ক্লাসটি ছাড়াও, জাভাতে আরেকটি স্ট্রিং-সদৃশ ক্লাস রয়েছে যাকে বলা হয় StringBuffer
। এটি StringBuilder
ক্লাসের একটি অ্যানালগ, কিন্তু এর পদ্ধতিগুলি সংশোধক দ্বারা চিহ্নিত করা হয় synchronized
।"
"ওটার মানে কি?"
"এর মানে হল যে StringBuffer
বস্তুটি একাধিক থ্রেড থেকে একযোগে অ্যাক্সেস করা যেতে পারে।"
"আমি এখনও থ্রেডগুলির সাথে খুব বেশি পরিচিত নই৷ তবে 'একাধিক থ্রেড থেকে অ্যাক্সেস করা যায়' 'একাধিক থ্রেড থেকে অ্যাক্সেস করা যায় না' এর চেয়ে স্পষ্টতই ভাল... তাহলে সবসময় ব্যবহার করবেন না কেন? StringBuffer
"
"কারণ এটির তুলনায় অনেক ধীরগতির । আপনি যখন জাভা মাল্টিথ্রেডিং কোয়েস্টে StringBuilder
সক্রিয়ভাবে মাল্টিথ্রেডিং অন্বেষণ শুরু করেন তখন আপনার এই ধরনের ক্লাসের প্রয়োজন হতে পারে ।
"আমি এটি আমার স্মৃতিতে লিখব যাতে ভুলে না যাই। 'ভবিষ্যতের জন্য' চিহ্নিত করা হয়েছে।
GO TO FULL VERSION