Lesson ৭ মিনিট পড়া

স্ট্রিং এবং ইন্টারপোলেশন (Strings & Interpolation)

টেক্সট বা লেখা সবখানেই আছে — নিজের ইচ্ছামতো এর ব্যবহার শিখে নিন

স্ট্রিং সবখানেই থাকে (Strings Are Everywhere)

প্রায় প্রতিটি প্রোগ্রামকেই বিভিন্ন ধরনের টেক্সট বা লেখা নিয়ে কাজ করতে হয় — যেমন নাম, মেসেজ, পাসওয়ার্ড, ইউআরএল (URLs) কিংবা ইমেইল। সি শার্পে (C#) এই টেক্সট বা লেখাগুলোকে string ভ্যারিয়েবলের ভেতরে রাখা হয়। একটি স্ট্রিং হলো মূলত অনেকগুলো ক্যারেক্টার বা অক্ষরের একটি চেইন (chain of characters), যাদেরকে একসাথে একটি সুতায় গাঁথা হয় (আর ঠিক এ কারণেই আক্ষরিক অর্থে একে "স্ট্রিং (string)" বলে ডাকা হয়)।

এখানে সবচেয়ে মজার বিষয়টি হলো: সি শার্পের (C#) স্ট্রিংগুলো হলো অপরিবর্তনশীল বা ইমমিউটেবল (immutable)। এর মানে হলো, একবার কোনো একটি স্ট্রিং তৈরি হয়ে গেলে আপনি আর সেটি পরিবর্তন করতে পারবেন না। প্রতিবার যখন আপনি কোনো স্ট্রিংকে "মডিফাই বা পরিবর্তন (modify)" করেন, তখন সি শার্প (C#) আসলে পেছনের দিকে বা আড়ালে সম্পূর্ণ নতুন আরেকটি স্ট্রিং তৈরি করে নেয়। এটি অনেকটা কলম দিয়ে লেখার মতো ব্যাপার — আপনি একবার যা লিখে ফেলেছেন তা আর মুছতে পারবেন না, বরং আপনাকে লেখার জন্য একটি নতুন পৃষ্ঠাই নিতে হবে।

স্ট্রিংয়ের বেসিক এবং ইন্টারপোলেশন (String Basics & Interpolation)

string name = "Laboni";
int age = 10;
// String interpolation — the modern way (use this!)
Console.WriteLine($"Hi, I'm {name} and I'm {age} years old.");
// You can put ANY expression inside { }
Console.WriteLine($"Next year I'll be {age + 1}!");
Console.WriteLine($"My name has {name.Length} letters.");
Console.WriteLine($"Uppercase: {name.ToUpper()}");
// Multi-line with @ (verbatim string)
string address = @"123 Main Street
Apt 4B
Dhaka, NY";
Console.WriteLine(address);
// Combine both: $@ for interpolated + multi-line
string card = $@"=================
Name: {name}
Age: {age}
=================";
Console.WriteLine(card);
Output
Hi, I'm Laboni and I'm 10 years old.
Next year I'll be 11!
My name has 4 letters.
Uppercase: LUNA
123 Main Street
Apt 4B
Dhaka, NY
=================
  Name: Laboni
  Age:  10
=================

স্ট্রিংয়ের মেথডসমূহ (String Methods — Your Toolbox)

স্ট্রিংয়ের সাথে বেশ কিছু অত্যন্ত কার্যকরী মেথড যুক্ত থাকে। এর প্রতিটি মেথডকে একটি আলাদা টুল (tool) বা হাতিয়ার হিসেবে ভাবতে পারেন:

  • .Length — লেখার ভেতর মোট কতগুলো অক্ষর আছে (এটি একটি প্রোপার্টি (property), তাই এর শেষে কোনো প্যারেন্থেসিস বা প্রথম বন্ধনী থাকে না)
  • .ToUpper() / .ToLower() — কোনো লেখাকে বড় হাতের (shout) অথবা ছোট হাতের (whisper) করে দেয়
  • .Trim() — কোনো লেখার শুরু এবং শেষ থেকে বাড়তি স্পেস বা হোয়াইটস্পেস (whitespace) মুছে ফেলে (ইউজারের ইনপুট নেওয়ার ক্ষেত্রে এটি দারুণ কাজ করে)
  • .Contains("text") — লেখার ভেতর নির্দিষ্ট এই কথাটি রয়েছে কিনা, সেটির উত্তর দেয়
  • .StartsWith() / .EndsWith() — কোনো লেখার শুরু অথবা শেষ অংশ চেক করে বা পরীক্ষা করে
  • .Substring(start, length) — একটি স্ট্রিংয়ের মাঝখান থেকে নির্দিষ্ট কোনো অংশ কেটে বের করে আনে
  • .Replace(old, new) — কোনো লেখাকে অন্য কিছু দিয়ে বদলে দেয়
  • .Split(separator) — একটি স্ট্রিংকে ভেঙে অ্যারে (array) তৈরি করে
  • .IndexOf("text") — নির্দিষ্ট কোনো লেখা ঠিক কোথায় আছে তা খুঁজে বের করে (যদি খুঁজে না পায় তবে -1 রিটার্ন করে)

সব সময় মনে রাখবেন: এই মেথডগুলো কিন্তু আসল বা অরিজিনাল স্ট্রিংকে পরিবর্তন করে না। বরং তারা সম্পূর্ণ নতুন একটি স্ট্রিং রিটার্ন করে। তাই আপনার কাজ হবে সেই ফলাফলটি সেভ করে রাখা!

ব্যাবহারিক ক্ষেত্রে স্ট্রিংয়ের মেথডসমূহ (String Methods in Action)

string sentence = " The quick brown fox jumps! ";
// Trim whitespace
string clean = sentence.Trim();
Console.WriteLine($"'{clean}'");
// Search
Console.WriteLine($"Contains 'fox': {clean.Contains("fox")}");
Console.WriteLine($"Starts with 'The': {clean.StartsWith("The")}");
Console.WriteLine($"Index of 'brown': {clean.IndexOf("brown")}");
// Extract
string word = clean.Substring(10, 5); // start at 10, take 5 chars
Console.WriteLine($"Extracted: {word}");
// Replace
string newSentence = clean.Replace("fox", "cat");
Console.WriteLine(newSentence);
// Split into words
string csv = "আম,জাম,কাঁঠাল,date";
string[] fruits = csv.Split(',');
foreach (string fruit in fruits)
{
Console.WriteLine($" Fruit: {fruit}");
}
Output
'The quick brown fox jumps!'
Contains 'fox': True
Starts with 'The': True
Index of 'brown': 10
Extracted: brown
The quick brown cat jumps!
  Fruit: আম
  Fruit: জাম
  Fruit: কাঁঠাল
  Fruit: date

StringBuilder — যখন গতি আর পারফরম্যান্সই আসল (StringBuilder — When Speed Matters)

আপনার কি মনে আছে যে, স্ট্রিং আসলে অপরিবর্তনশীল বা ইমমিউটেবল (immutable)? এর মানে হলো, প্রতিবার যখন আপনি লুপের (loop) ভেতর result += "something" ব্যবহার করেন, সি শার্প (C#) প্রতিবারই একটি করে নতুন স্ট্রিং তৈরি করে এবং পুরোনোটিকে ফেলে দেয়। আপনি যদি এই কাজ ১০,০০০ বার করেন, তবে আপনার প্রোগ্রামটি অনেক বেশি ধীরগতির (slow) হয়ে যাবে।

এই ক্ষেত্রে StringBuilder অনেকটা একটি হোয়াইটবোর্ডের (whiteboard) মতো কাজ করে — আপনি চাইলে প্রতিবার নতুন বোর্ড না এনে একই বোর্ডের ওপর বারবার লিখতে এবং মুছতে পারবেন। যখন আপনাকে একটু একটু করে অনেক বড় একটি স্ট্রিং তৈরি করতে হবে, তখন এই পদ্ধতিটি ব্যবহার করবেন।

পারফরম্যান্সের জন্য StringBuilder (StringBuilder for Performance)

using System.Text;
// Bad way (fine for small stuff, slow for loops)
string slow = "";
for (int i = 0; i < 5; i++)
slow += $"Item {i}, ";
Console.WriteLine(slow);
// Good way — StringBuilder
var sb = new StringBuilder();
for (int i = 0; i < 5; i++)
{
sb.Append($"Item {i}");
if (i < 4) sb.Append(", ");
}
Console.WriteLine(sb.ToString());
// StringBuilder tricks
var builder = new StringBuilder();
builder.AppendLine("Line 1");
builder.AppendLine("Line 2");
builder.Insert(0, "Title\n");
Console.WriteLine(builder.ToString());
Output
Item 0, Item 1, Item 2, Item 3, Item 4, 
Item 0, Item 1, Item 2, Item 3, Item 4
Title
Line 1
Line 2
Note: 🧠 ছোট্ট একটি নিয়ম: আপনি যদি কোনো লুপের (loop) ভেতর (প্রায় ১০ বারের বেশি) অনেকগুলো স্ট্রিংকে জোড়া লাগানোর কাজ করেন, তবে সরাসরি StringBuilder ব্যবহার করুন। কিন্তু লুপের বাইরের সাধারণ কাজের জন্য $ ব্যবহার করে স্ট্রিং ইন্টারপোলেশন (string interpolation) করাটাই সবচেয়ে ভালো এবং এটি পড়তেও অনেক বেশি সহজ হয়।
চ্যালেঞ্জ

ছোট কুইজ

স্ট্রিং ইন্টারপোলেশন ($"...") আপনাকে কী করার সুযোগ দেয়?

পড়া চালিয়ে যান

Operators & ExpressionsConditionals