C#-এ স্ট্রিংয়ের প্রথম ক্যারেক্টার বের করার সবচেয়ে সহজ পদ্ধতি হলো `Substring(0, 1)` ব্যবহার করা। তবে আরও দ্রুত এবং ইডিয়ামেটিক পদ্ধতিও রয়েছে।
পদ্ধতি ১: Substring (ক্লাসিক)
string str = "Welcome to the Planet!";
string firstChar = str.Substring(0, 1); // "W"
Console.WriteLine(firstChar);
পদ্ধতি ২: ইন্ডেক্সার (দ্রুততম, char রিটার্ন)
string str = "Welcome to the Planet!";
char firstChar = str[0]; // 'W' - char রিটার্ন করে
Console.WriteLine(firstChar);
পদ্ধতি ৩: LINQ First()
using System.Linq;
char firstChar = str.First(); // 'W'
// খালি স্ট্রিং হলে InvalidOperationException থ্রো করে
// নিরাপদ ভার্সন:
char? firstCharSafe = str.FirstOrDefault(); // '\0' যদি খালি হয়
সম্পূর্ণ উদাহরণ (তুলনা)
using System;
using System.Diagnostics;
public class Demo
{
public static void Main()
{
string str = "Welcome to the Planet!";
// পদ্ধতি ১: Substring
var sw1 = Stopwatch.StartNew();
for (int i = 0; i < 1000000; i++)
var r1 = str.Substring(0, 1);
sw1.Stop();
// পদ্ধতি ২: Indexer
var sw2 = Stopwatch.StartNew();
for (int i = 0; i < 1000000; i++)
var r2 = str[0];
sw2.Stop();
// পদ্ধতি ৩: LINQ First
var sw3 = Stopwatch.StartNew();
for (int i = 0; i < 1000000; i++)
var r3 = str.First();
sw3.Stop();
Console.WriteLine($"Substring: {sw1.ElapsedMilliseconds} ms");
Console.WriteLine($"Indexer: {sw2.ElapsedMilliseconds} ms");
Console.WriteLine($"LINQ First: {sw3.ElapsedMilliseconds} ms");
// আউটপুট (টিপিক্যাল):
// Substring: 45 ms
// Indexer: 3 ms
// LINQ First: 120 ms
}
}
সাবস্ট্রিং এর ভেরিয়েশন
string str = "Hello World";
// প্রথম N ক্যারেক্টার
string first3 = str.Substring(0, 3); // "Hel"
string firstN = str.Substring(0, Math.Min(10, str.Length)); // সেফ
// নির্দিষ্ট পজিশন থেকে
string from5 = str.Substring(6); // "World" (ইন্ডেক্স ৬ থেকে শেষ)
// Range অপারেটর (C# 8.0+)
string first3_v2 = str[..3]; // "Hel"
string from5_v2 = str[6..]; // "World"
string middle = str[2..8]; // "llo Wo"
নাল/খালি স্ট্রিং হ্যান্ডলিং
public static char GetFirstCharSafe(string str)
{
if (string.IsNullOrEmpty(str))
return '\0'; // অথবা throw / default char
return str[0];
}
// Pattern matching (C# 7+)
public static char GetFirstCharPattern(string str) => str switch
{
null => '\0',
"" => '\0',
_ => str[0]
};
গ্রাফিম ক্লাস্টার (ইমোজি, কম্বাইনড ক্যারেক্টার)
string emoji = "👨👩👧👦 Family"; // ১১ char (UTF-16 কোড ইউনিট)
// সিম্পল indexer - ভুল ফলাফল
char firstCodeUnit = emoji[0]; //.high surrogate বা partial
// সঠিক: StringInfo ব্যবহার করুন
using System.Globalization;
var info = new StringInfo(emoji);
string firstGrapheme = info.SubstringByTextElements(0, 1); // "👨👩👧👦"
সারসংক্ষেপ
| পদ্ধতি | রিটার্ন টাইপ | স্পিড | খালি স্ট্রিং হ্যান্ডলিং |
|---|---|---|---|
| `str[0]` | char | দ্রুততম | IndexOutOfRangeException |
| `str.Substring(0,1)` | string | ধীর (অ্যালোকেশন) | ArgumentOutOfRangeException |
| `str.First()` | char | ধীর | InvalidOperationException |
| `str.FirstOrDefault()` | char | ধীর | রিটার্ন '\0' (নাল না) |
| `str[..1]` (Range) | string | মাঝারি | ArgumentOutOfRangeException |
সুপারিশ: সাধারণ ব্যবহারের জন্য `str[0]` (char চাইলে) বা `str[..1]` (string চাইলে) ব্যবহার করুন। নাল চেক করা নিশ্চিত করুন।