স্ট্রিং অভ্যন্তরীণ কাজ, এবং সাবস্ট্রিং পদ্ধতি - 1

"হাই, অ্যামিগো!"

"হাই, এলি।"

"আমি আপনাকে সাবস্ট্রিং সম্পর্কে বলতে যাচ্ছি। একটি সাবস্ট্রিং হল একটি স্ট্রিং এর একটি অংশ। এবং স্ট্রিংগুলির উপর সঞ্চালিত সবচেয়ে সাধারণ অপারেশনটি হল একটি সাবস্ট্রিং প্রাপ্ত করা।"

7) আমি কিভাবে একটি স্ট্রিং এর অংশ পেতে পারি?

"সাবস্ট্রিং পদ্ধতিটি একটি স্ট্রিংয়ের অংশ প্রদান করে। এই পদ্ধতির দুটি সংস্করণ রয়েছে।"

"প্রথম সংস্করণটি সূচনা এবং শেষের সূচক দ্বারা নির্দিষ্ট করা সাবস্ট্রিং প্রদান করে। কিন্তু শেষের সূচকের অক্ষরটি অন্তর্ভুক্ত করা হয় না! আপনি যদি 1 এবং 3 নম্বর পাস করেন, তাহলে সাবস্ট্রিংটিতে শুধুমাত্র দ্বিতীয় এবং তৃতীয় অক্ষর থাকবে (মনে রাখবেন সূচকগুলি শুরু হবে 0 সহ)।"

"দ্বিতীয় সংস্করণটি পাস করা সূচক থেকে শুরু করে স্ট্রিংয়ের শেষ পর্যন্ত সাবস্ট্রিং প্রদান করে।"

পদ্ধতি(গুলি) উদাহরণ(গুলি)
String substring(int beginIndex, int endIndex)
String s = "Good news, everyone!";
s = s.substring(1,6);
ফলাফল:

s == "ood n";
String substring(int beginIndex)
String s = "Good news, everyone!";
s = s.substring(1);

"এটা যথেষ্ট সহজ। ধন্যবাদ, এলি।"

"আমি আপনাকে স্ট্রিং অবজেক্টের অভ্যন্তরীণ কাজগুলিও ব্যাখ্যা করতে যাচ্ছি।"

"আপনি সম্ভবত ইতিমধ্যেই জানেন যে, স্ট্রিং একটি অপরিবর্তনীয় শ্রেণী। এবং এটি আমাদের কী সুবিধা দেয়? যেমনটি ঘটে, মূল সুবিধাগুলির মধ্যে একটি হল একটি সাবস্ট্রিং পাওয়ার ক্ষমতা। তবে প্রথম জিনিসগুলি প্রথমে।"

"অভ্যন্তরীণভাবে, একটি স্ট্রিং অবজেক্টে অক্ষরগুলির একটি অ্যারে থাকে, যা অনুমান করা কঠিন নয়৷ তবে এটি আরও দুটি ভেরিয়েবল সঞ্চয় করে: অ্যারের প্রথম অক্ষরের সূচক এবং অক্ষর গণনা৷ এখন আমি আপনাকে বলব এইগুলি কী জন্য ব্যবহৃত হয়।"

"যখন আমরা সাবস্ট্রিং পদ্ধতি ব্যবহার করে একটি সাবস্ট্রিং তৈরি করি, তখন একটি নতুন স্ট্রিং অবজেক্ট তৈরি হয়।"

"কিন্তু, একটি নতুন ক্যারেক্টার অ্যারের রেফারেন্স সংরক্ষণ করার পরিবর্তে, অবজেক্টটি পুরানো অ্যারের সাথে সাথে দুটি ভেরিয়েবলের একটি রেফারেন্স সঞ্চয় করে যা এটি এর সাথে যুক্ত মূল অক্ষর অ্যারের অংশ নির্ধারণ করতে ব্যবহার করে।"

"আমি এর কিছুই বুঝতে পারিনি।"

"যখন একটি সাবস্ট্রিং তৈরি করা হয়, তখন অক্ষর অ্যারেটি নতুন স্ট্রিং অবজেক্টে অনুলিপি করা হয় না। পরিবর্তে, উভয় বস্তুই মূল অক্ষর অ্যারের একটি রেফারেন্স সংরক্ষণ করে। কিন্তু! দ্বিতীয় অবজেক্টটি দুটি ভেরিয়েবলও সঞ্চয় করে: অ্যারেতে এর শুরু সূচক এবং সাবস্ট্রিং এর অন্তর্গত অক্ষরের সংখ্যা।"

"এটা দেখ:"

একটি সাবস্ট্রিং পাচ্ছেন সাবস্ট্রিং ভিতরে কি সংরক্ষিত হয়
String s = "mama";
s এ কি সংরক্ষিত আছে:

char[] value = {'m','a','m','a'};
offset = 0;
count = 4;
String s2 = s.substring(1);
s2 এ কি সংরক্ষিত আছে:

char[] value = {'m','a','m','a'};
offset = 1;
count = 3;
String s3 = s.substring(1, 3);
s3 এ কি সংরক্ষিত আছে:

char[] value = {'m','a','m','a'};
offset = 1;
count = 2;

"তিনটি স্ট্রিং একই চর অ্যারের একটি রেফারেন্স সঞ্চয় করে, কিন্তু তারা তাদের সাথে সম্পর্কিত প্রথম এবং শেষ অক্ষরের সূচীও সংরক্ষণ করে। অথবা আরও সঠিকভাবে, প্রথম অক্ষরের সূচক এবং অক্ষর গণনা।"

"এটা এখন বোধগম্য হয়।"

"সুতরাং, আপনি যদি 10,000 অক্ষর দীর্ঘ একটি স্ট্রিং নেন এবং আপনি যেকোন দৈর্ঘ্যের 10,000 সাবস্ট্রিং তৈরি করেন, এই সাবস্ট্রিংগুলি খুব কম মেমরি ব্যবহার করবে, কারণ অক্ষর অ্যারেটি সদৃশ নয়৷ এই স্ট্রিংগুলি, যা আপনি অনেক বেশি ব্যবহার করার আশা করবেন স্থানের, আক্ষরিক অর্থে শুধুমাত্র কয়েক বাইট লাগবে।"

"কুল!"

"কিন্তু আপনি কি তা করতে পারেন যদি আপনি স্ট্রিংগুলি পরিবর্তন করতে পারেন?"

"না, কেউ প্রথম স্ট্রিং পরিবর্তন করতে পারে, এবং তারপরে এর সমস্ত সাবস্ট্রিংগুলিও পরিবর্তিত হবে। এখন এটা বোঝা যায় যে কেন তারা এটি করেছে। এটি সত্যিই একটি দুর্দান্ত সমাধান।"

"আমি আনন্দিত আপনি এটা পছন্দ করেছে."