معرفی متد های رشته (string) در سی شارپ - بخش پنجم
آموزش سی شارپ

معرفی متد های رشته (string) در سی شارپ - بخش پنجم

همانطور که می دانید مقدار پیش فرض رشته ها (string) null هست . مثل نوع داده ای عددی که مقدار 0 به عنوان پیش فرض آن در نظر گرفته می شود . حال در نظر داشته باشید که برنامه نوشته اید که با رشته ها مدام در حال کار هستیم و اگر برای زمانی که رشته های ما null هستند برنامه ای نداشته باشیم و بررسی خطاها را انجام نداده باشیم (error handling) ، خب به مشکلات بزرگی بر میخوریم و خطاهایی که در زمان اجرای نرم افزار می بینیم به شدت زیاد میشه .

String str1 =null;
Test(str1);
static void Test(String str)
{
    Console.WriteLine(str.Length);
}

نتیجه اجرای کد بالا:

 System.NullReferenceException: Object reference not set to an instance of an object.

خب شروع می کنیم به بررسی این موضوع :

بررسی null بودن یک رشته با متد IsNullOrEmpty :

این متد اگر رشته ای خالی باشد یا مقدار null داشته باشد مقدار true و در غیر این صورت مقدار false را برمی گرداند.

String str1 =string.Empty;
Console.WriteLine(CheckString(str1));
static bool CheckString(string str)
{
    return string.IsNullOrEmpty(str);
}

خروجی این کد مقدار true می باشد . چرا که مقدار رشته ما خالی است .

یک رشته را به صورت خالی تعریف کرده ایم با خصوصیت String.Empty و با  مقدار null متفاوت است .

String str1 =null;
Console.WriteLine(CheckString(str1));
static bool CheckString(string str)
{
    return string.IsNullOrEmpty(str);
}

خروجی کد بالا هم مقدار true است چون مقدار null را در رشته قرار داده ایم.

حالا تفاوت null و String.Empty را بررسی کنیم:

String str1 =null;
String str2 =string.Empty;
//Console.WriteLine(str1.Length);
Console.WriteLine(str2.Length);

در حالتی که رشته را برابر null قرار دهیم هنگام محاسبه طول رشته همان خطای null بودن رو به ما نشان خواهد داد ولی زمانی که رشته را برابر String.Empty قرار می دهیم طول رشته برابر 0 خواهد بود و خطایی نشان داده نخواهد شد.

حالا ما می توانیم یک اکستنشن متد طراحی کنیم که در هنگام کار با رشته ها ابتدا null بودن رشته ها را بررسی کنیم و سپس هر محاسبه ای می خوایم روی اون انجام بدیم.

متد زیر :

public static class Common
    {
        public static bool StringHasNullOrEmpty(this string str)
        {
            return string.IsNullOrEmpty(str);
        }
    }

و روش دوم بررسی null بودن هم به صورت زیر هست که البته بهترین روش همون تعریف بالا هست که به صورت اکستنشن متد هست.

if (string.IsNullOrEmpty(str1))
{
    Console.WriteLine("0");
}
else
{
    Console.WriteLine(str1.Length);
}

 متد IsNullOrWhiteSpace :

این متد برای بررسی null بودن یا اینکه یک رشته به فضای خالی باشه مورد استفاده قرار می گیره . نحوه عملکردش شبیه به متد IsNullOrEmpty است . فضای خالی هم زمانی است که کاربر مثلا روی دکمه space کیبورد تعداد زیادی فضای خالی ایجاد میکنه.

متد IsNormalized و Normalize :

برخی از کاراکترهای یونیکد چندین نمایش دودویی معادل دارند که شامل مجموعه‌ای از کاراکترهای ترکیبی و/یا ترکیبی یونیکد است. وجود چندین نمایش برای یک کاراکتر، جستجو، مرتب‌سازی، تطبیق و سایر عملیات‌ها را پیچیده می‌کند.

استاندارد یونیکد فرآیندی به نام نرمال‌سازی را تعریف می‌کند که وقتی هر یک از نمایش‌های دودویی معادل یک کاراکتر داده می‌شود، یک نمایش باینری را برمی‌گرداند. به مثال زیر توجه کنید.

String str1 ="yaser dehghan";
string s1 = new String(new char[] { '\u0063', '\u0301', '\u0327', '\u00BE' });
Console.WriteLine(s1); /// output : c',_
Console.WriteLine(s1.IsNormalized());   /// output :False
Console.WriteLine(s1.Normalize());///  output :?_

Console.WriteLine(str1.IsNormalized());/// True

خروجی کد بالا مشخص می کند که عملیات نرمال سازی به چه شکل عمل میکند. در مثال بالا یک ارایه از 4 کاراکتر ایجاد کرده ایم که در خروجی خط اول (c',_) مشاهده میکنید . این رشته شامل کاراکترهایی است که در استاندارد یونیکد شامل چند نمایش دودویی هستند به همین خاطر با استفاده از متد Normalize رشته مورد نظر را به صورت نرمال تبدیل کرده ایم.

نویسنده

یاسر دهقان

تاریخ نگارش
16 بهمن 1402
18 مقاله این نویسنده