در زبان برنامهنویسی سیشارپ #C، رشته یا «string» یک دنبالهای از کاراکترهای یونیکد است که بهصورت آرایهای از کاراکترها نیز در نظر گرفته میشود. دامنه کاراکترهای یونیکد از U+0000 تا U+FFFF متغیر است. از آنجا که آرایهای از کاراکترها بهعنوان متن شناخته میشود، میتوان رشته را نمایشی از متن دانست. رشتهها در برنامهنویسی نقش مهمی ایفا میکنند و گاهی اوقات این سؤال پیش میآید که آیا رشتهها یک کلمه کلیدی هستند، یک شیء بهحساب میآیند، یا یک کلاس محسوب میشوند. در این مقاله قصد داریم رشته ها در سی شارپ را بهطور شفاف بررسی کنیم.
مقدمه
رشتهها یا «Strings» از اساسیترین و پرکاربردترین نوع دادهها در برنامهنویسی محسوب میشوند و برای ذخیره و مدیریت دادههای متنی در بسیاری از زبانهای برنامهنویسی، از جمله #C، استفاده میشوند. در سیشارپ، رشتهها بهعنوان اشیائی از کلاس System.String مدیریت میشوند و ویژگیهای خاصی دارند که آنها را از سایر انواع داده متمایز میکند. یکی از مهمترین ویژگیهای رشته ها در سی شارپ این است که از نوع Reference Type هستند و هرگونه تغییر در مقدار آنها باعث ایجاد یک رشته جدید میشود.
این مقاله از سری مقالات آموزشی پی استور با هدف ارائه یک درک عمیق از عملکرد رشته ها در سی شارپ #C و نحوه استفاده بهینه از آنها تدوین شده است. در ادامه، ویژگیهای کلیدی رشتهها، روش ایجاد و استفاده از آرایههای رشتهای، و عملیات مختلفی که میتوان بر روی رشتهها انجام داد، بررسی خواهد شد. همچنین به نکاتی مانند مدیریت کاراکترهای null و نحوه ذخیرهسازی رشتهها در حافظه خواهیم پرداخت.
رشته ها در سی شارپ
رشتهها در سیشارپ توسط کلاس System.String پیادهسازی شدهاند. کلیدواژه string در واقع یک نام مستعار برای کلاس System.String است. بنابراین، میتوانید از کلمه String یا string برای تعریف رشتهها استفاده کنید؛ هر دو به یک مفهوم اشاره دارند و معادل یکدیگر هستند. در نتیجه، رشته ها در سی شارپ بهعنوان اشیائی از کلاس System.String شناخته میشوند.
مثال
// creating the string using string keyword string s1 = “ProgramStore”; // creating the string using String class String s2 = “PsT”; // creating the string using String class System.String s3 = “PStore”;
در کتابخانه پایهی NET.، کلاس String تعریف شده است که برای نمایش و مدیریت رشتهها استفاده میشود. بهعبارت دیگر، یک شیء از نوع String مجموعهای ترتیبی از اشیاء System.Char است که یک رشته متنی را تشکیل میدهند. حداکثر اندازهی یک شیء String در حافظه برابر با ۲ گیگابایت یا حدود ۱ میلیارد کاراکتر است که محدودیت قابل توجهی برای استفاده در پردازشهای متنی بزرگ محسوب میشود.
برنامه: قطعه کد زیر، به معرفی انواع مختلفی از اعلان و مقداردهی متغیرهای نوع string در زبان سی شارپ میپردازد.
// C# program to declare string using // string, String and System.String // and initialization of string using System; class ProgramStore { // Main Method static void Main(string[] args) { // declare a string Name using // "System.String" class System.String Name; // initialization of String Name = "PStore"; // declare a string id using // using an alias(shorthand) // "String" of System.String // class String id; // initialization of String id = "33"; // declare a string mrk using // string keyword string mrk; // initialization of String mrk = "97"; // Declaration and initialization of // the string in a single line string rank = "1"; // Displaying Result Console.WriteLine("Name: {0}", Name); Console.WriteLine("Id: {0}", id); Console.WriteLine("Marks: {0}", mrk); Console.WriteLine("Rank: {0}", rank); } }
خروجی
Name: PStore Id: 33 Marks: 97 Rank: 1
ویژگی های کلیدی رشته ها در سی شارپ
رشته ها در سی شارپ دارای ویژگیهای منحصربهفردی هستند که آنها را از سایر انواع داده متمایز میکند:
- تغییرناپذیر «Immutable»: پس از ایجاد، محتوای یک رشته نمیتواند تغییر کند. هر تغییری منجر به ایجاد یک رشته جدید میشود.
- نوع ارجاعی «Reference Type»: رشتهها نوع ارجاعی هستند، اما در برخی موارد مانند مقایسه، مانند نوع مقداری رفتار میکنند.
- پشتیبانی از یونیکد «Unicode Support»: رشتهها میتوانند حاوی هر کاراکتر یونیکد باشند و از چندین زبان پشتیبانی میکنند.
- تهی و تهی تعبیهشده «Null and Embedded Nulls»: رشتهها میتوانند تهی (null) باشند و همچنین ممکن است شامل کاراکترهای تهی تعبیهشده (\۰) باشند.
- بارگذاری عملگرها «Operator Overloading»: رشتهها از بارگذاری عملگرها پشتیبانی میکنند، مانند عملگر + برای الحاق و == برای مقایسه.
ویژگی های کلاس String
کلاس System.String دارای چندین ویژگی داخلی مفید است، از جمله:
- Chars: این ویژگی به شما اجازه میدهد به یک کاراکتر خاص در موقعیت مشخصی از رشته دسترسی داشته باشید.
- Length: این ویژگی تعداد کاراکترهای موجود در یک رشته را برمیگرداند.
خواندن رشته از ورودی کاربر
یک رشته میتواند از ورودی کاربر خوانده شود. متد ()ReadLine از کلاس Console برای خواندن یک رشته از ورودی کاربر استفاده میشود.
مثال: برنامه #C زیر برای خواندن ورودی از کاربر و نمایش آن استفاده میشود.
// C# program to demonstrate Reading // String from User-Input using System; class ProgramStore { // Main Method static void Main(string[] args) { Console.WriteLine("Enter the String"); // Declaring a string object read_user // and taking the user input using // ReadLine() method String read_user = Console.ReadLine(); // Displaying the user input Console.WriteLine("User Entered: " + read_user); } }
ورودی
Enter the String Hello PStore !
خروجی
User Entered: Hello PStore !
ایجاد رشته ها در سی شارپ #C
در سیشارپ، روشهای متعددی برای ایجاد رشتهها وجود دارد که برخی از آنها در ادامه توضیح داده میشود.
متد | ساختار یا مثال |
یک رشته از یک literal ایجاد کنید | ;”string str = “ProgramStore |
یک رشته با استفاده از الحاق ایجاد کنید | ;”string str = str1 + “data |
یک رشته با استفاده از سازنده ایجاد کنید | یک رشته از یک آرایه کاراکتری ایجاد کنید// ;char[] chars = { ‘G’, ‘E’, ‘E’, ‘K’, ‘S’ } ;string str = new string(chars) |
یک رشته با استفاده از یک ویژگی یا یک متد ایجاد کنید | شروع و پایان ایندکس برای شاخص str هستند// ;string substr = str.Substring(start, end) |
یک رشته با استفاده از قالب بندی ایجاد کنید |
string str = string.Format(“{۰} {۱} Cars color ” + “are {2}”, no.ToString(), cname, clr); |
مثال: برنامه #C زیر به شما نشان میدهد که چگونه میتوان رشتهها را به روشهای مختلف ایجاد کرد.
// Different Methods for Creating // String in C# using System; public class Pstore { // Main Method static public void Main () { // Creating String using string literal String str = "Program"; Console.WriteLine("Method 1: " + str); // Creating String using concatenation String str2 = str + "Store"; Console.WriteLine("Method 2: " + str2); // Creating a string using a constructor char[] chars = { 'P', 'S', 't', 'o', 'r' }; string str3 = new string(chars); Console.WriteLine("Method 3: " + str3); // Creating a string using a property or a method String s = "program and Store"; // Index of int start = s.IndexOf(" ") + 1; int end = s.IndexOf(" ", start) - start; string str4 = s.Substring(start, end); Console.WriteLine("Method 4: " + str4); // Creating a string using formatting int i=1; int j=2; int sum= i + j; String str5 = string.Format("Addition of {0} with {1} is {2}" , i , j , sum ); Console.WriteLine("Method 5: " + str5); } }
خروجی
Method 1: Program Method 2: ProgramStore Method 3: PStor Method 4: and Method 5: Addition of 1 with 2 is 3
توضیحات: روشهایی که در مثال بالا استفاده شده است.
- روش اول: استفاده از رشتههای ساده «String Literal».
- روش دوم: اتصال رشتهها «Concatenation» با استفاده از عملگر +.
- روش سوم: استفاده از سازنده «Constructor» برای ساخت رشته از آرایههای کاراکترها.
- روش چهارم: استفاده از متدها مانند Substring برای استخراج بخشهایی از یک رشته.
- روش پنجم: استفاده از فرمتبندی رشتهها «String Formatting» با string.Format برای درج متغیرها داخل رشتهها.
این روشها کاربردهای مختلفی دارند و بسته به نیاز شما میتوانید از آنها استفاده کنید.
عملیات رشته در سی شارپ #C
عملیات رشته در سیشارپ شامل مجموعهای از روشها و قابلیتها برای مدیریت و پردازش رشتهها (متنها) است. رشتهها در سیشارپ با استفاده از کلاس String در فضای نام System تعریف میشوند. رشتهها در سیشارپ تغییرناپذیر هستند «Immutable»، به این معنی که هر بار که یک رشته تغییر میکند، نسخه جدیدی از آن ساخته میشود.
در ادامه عملیات رشتههای میانجی «Interpolation» و عملیات Trim، Replace و Concatenate روی رشتهها با مثال توضیح داده شده است:
عملیات میانجیگری رشته
رشتههای میانجی به شما اجازه میدهند مقادیر متغیرها را مستقیماً درون یک رشته جایگذاری کنید. از علامت دلار ($) قبل از یک رشته برای فعال کردن این ویژگی استفاده میشود.
مثال ۱: برنامه #C زیر از ویژگی رشتههای میانجی «string interpolation» برای ساخت یک رشته جدید استفاده میکند و طول رشته را نیز محاسبه میکند.
using System; public class PStore { // Main Method static public void Main () { string name = "ProgramStore"; // Interpolation is performed string res = $"{name} is the Organisation Name."; // Printing the String Console.WriteLine(res); Console.WriteLine("Length: " + res.Length); } }
خروجی
ProgramStore is the Organisation Name. Length: 38
نکات:
- رشته میانجی «string interpolation»: یکی از ویژگیهای C# از نسخه ۶ به بعد است که امکان قرار دادن متغیرها داخل رشتهها بهصورت مستقیم را فراهم میکند. این روش خوانایی کد را افزایش میدهد.
- ویژگی Length: برای محاسبه طول یک رشته در #C از ویژگی Length استفاده میشود که تعداد کاراکترهای موجود در رشته را برمیگرداند.
این روش یکی از سادهترین و خواناترین راهها برای ترکیب رشتهها
انجام عملیات Trim، Replace و Concatenate روی رشتهها
در ادامه این مقاله مثالهایی برای استفاده از عملیات Trim، Replace و Concatenate (ترکیب) روی رشتهها در سیشارپ آورده شده است:
مثال ۲: برنامه #C زیر چند عملیات مختلف روی رشتهها انجام میدهد، از جمله حذف فضاهای اضافی از ابتدا و انتهای رشتهها، دسترسی به عناصر یک رشته و جایگزینی کاراکترها.
using System; public class Pstore { static public void Main () { string first = " Program "; string second = " Store "; // trim the String first=first.Trim(); second=second.Trim(); // Checking element at index 2 first Console.WriteLine("Element at index 2: " + first[2]); // replacing the element in String first=first.Replace("E","e"); Console.WriteLine(first+second); } }
خروجی
Element at index 2: o ProgramStore
توضیحات:
- متد ()Trim: برای حذف فضاهای اضافی از ابتدا و انتهای رشتهها استفاده میشود.
- دسترسی به عناصر رشته: با استفاده از ایندکس، میتوان به کاراکترهای یک رشته دسترسی پیدا کرد.
- متد ()Replace: برای جایگزینی تمامی occurrences از یک کاراکتر با کاراکتری دیگر در رشته استفاده میشود.
برنامه بالا نشاندهندهی نحوهی استفاده از این متدها و ویژگیها برای انجام تغییرات مختلف روی رشتهها است.
متد های رشته در سی شارپ
در سیشارپ (#C)، کلاس String مجموعهای از متدهای مختلف برای عملیات مرتبط با رشتهها ارائه میدهد. این متدها برای پردازش، جستجو، اصلاح و تجزیه رشتهها به کار میروند.
در ادامه لیستی از متدهای مهم مرتبط با رشتهها در C# ارائه شده است. این متدها عملیات مختلفی را روی رشتهها انجام میدهند:
متد | توضیحات | نوع برگشت | مثال |
IndexOf | شاخص اولین وقوع یک کاراکتر یا زیر رشته مشخص شده را پیدا می کند. | Integer | ;text.IndexOf(“World”) |
StartsWith | بررسی می کند که آیا یک رشته با یک زیررشته مشخص شروع می شود. | Boolean | ;text.StartsWith(“Hello”) |
EndsWith | بررسی میکند که آیا یک رشته با یک زیررشته مشخص به پایان میرسد. | Boolean | ;text.EndsWith(“World!”) |
ToUpper | یک رشته را به حروف بزرگ تبدیل می کند. | String | ;()text.ToUpper |
ToLower | یک رشته را به حروف کوچک تبدیل می کند. | String | ;()text.ToLower |
Split | یک رشته را بر اساس یک جداکننده مشخص به آرایه تقسیم می کند. | String Array | ;(‘,’)fruits.Split |
Join | آرایهای از رشتهها را با یک جداکننده مشخص در یک رشته واحد ترکیب میکند. | String | ;string.Join(” – “, fruitArray) |
Contains | بررسی میکند که آیا یک رشته دارای زیررشته مشخصی است یا خیر. | Boolean | ;text.Contains(“World”) |
PadLeft | یک رشته را با فاصله یا یک کاراکتر مشخص به طول مشخصی اضافه می کند. | String | ;text.PadLeft(20, ‘*’) |
PadRight | رشتهای را در سمت راست با فاصلهها یا یک کاراکتر مشخص به طول مشخصی اضافه میکند. | String | ;text.PadRight(20, ‘*’) |
Remove | کاراکترها را از رشته ای که از یک شاخص مشخص شروع می شود حذف می کند. | String | ;text.Remove(5, 7) |
Insert | یک رشته را در یک شاخص مشخص درج می کند. | String | ;text.Insert(5, ” Beautiful”) |
Trim | فضاهای سفید پیشرو و انتهایی را حذف می کند. | String | ;()text.Trim |
Replace | وقوع یک رشته فرعی را با زیررشته دیگری جایگزین می کند. | String | ;text.Replace(“fun”, “awesome”) |
آرایه های رشته ای در سی شارپ
آرایههای رشتهای در سیشارپ به شما این امکان را میدهند که مجموعهای از رشتهها را ذخیره کنید و روی آنها عملیات مختلف انجام دهید. یک آرایه رشتهای در سیشارپ مشابه سایر آرایهها است، با این تفاوت که نوع دادهی ذخیرهشده در آن string است.
در زیر چند روش برای ایجاد و استفاده از آرایههای رشتهای نشان داده شده است:
String [] array_variable = new String[Length_of_array]
مثال: قطعه کد #C زیر برای کار با آرایهای از رشتهها نوشته شده است. این برنامه بهطور ساده نحوهی کار با آرایهها و دسترسی به عناصر آنها را در C# نشان میدهد.
// C# program for an array of strings using System; class PStore { // Main Method static void Main(string[] args) { String[] str_arr = new String[3]; // Initialising the array of strings str_arr[0] = "Program"; str_arr[1] = "and"; str_arr[2] = "Store"; // printing String array for(int i = 0; i < 3; i++) { Console.WriteLine("value at Index position " + i + " is " + str_arr[i]); } } }
خروجی
value at Index position 0 is Program value at Index position 1 is and value at Index position 2 is Store
توضیحات:
- آرایهها در #C: یک آرایه در سی شارپ میتواند مجموعهای از دادههای مشابه باشد. در مثال بالا، ما آرایهای از رشتهها داریم که ۳ عنصر از نوع string را ذخیره میکند.
- حلقه for: برای تکرار و دسترسی به عناصر آرایه میتوان از حلقه for استفاده کرد. مقدار ایندکس از ۰ شروع میشود و تا n-1 ادامه پیدا میکند (در مثال بالا ۳ عنصر داریم، پس ایندکسها ۰، ۱، و ۲ خواهند بود).
String در مقابل System.String
در سیشارپ، string و System.String در واقع به یک چیز اشاره دارند و از نظر عملکرد و ویژگیها تفاوتی ندارند. در حقیقت، string یک alias (نام مستعار) برای System.String است که در فضای نام System تعریف شده است.
جنبهها Aspects | کلمه کلیدی string | System.String (Class) |
تعریف Definition | نام مستعار برای System.String. | نام کلاس کاملا واجد شرایط در NET. |
عملکرد Performance | تفاوتی در عملکرد وجود ندارد. | تفاوتی در عملکرد وجود ندارد. |
کاربرد Usage | معمولاً برای اعلان متغیرها، فیلدها و خصوصیات استفاده می شود. | برای دسترسی به روش های استاتیک یا انواع کاملاً واجد شرایط استفاده می شود. |
سهولت استفاده Ease of Use | خلاصه ای برای نوشتن کد ارائه می دهد. | پرمخاطب تر اما از نظر عملکردی با رشته یکسان است. |
روش های دسترسی Accessing Methods | متدها از طریق کلاس System.String قابل دسترسی هستند. | متدهای استاتیک مانند String.Substring، String.IndexOf و غیره مستقیماً قابل دسترسی هستند. |
کلمه کلیدی یا کلاس Keyword or Class | کلمه کلیدی سی شارپ | کلاس NET. |
جمعبندی:
- string کلمه کلیدی زبان سیشارپ است که به کلاس System.String اشاره میکند.
- System.String نام کامل کلاس است که در فضای نام System قرار دارد.
- از نظر عملکرد و قابلیتها هیچ تفاوتی بین این دو وجود ندارد.
در بیشتر موارد، توصیه میشود از string به عنوان کلمه کلیدی زبان استفاده کنید، زیرا کوتاهتر و راحتتر است.
نکته: درNET. ، متن به صورت مجموعهای ترتیبی از اشیاء Char ذخیره میشود، بنابراین هیچ کاراکتر پایانی (null-terminating character) در انتهای یک رشته #C وجود ندارد.
سخن آخر
از آنجا که رشتهها در C# به عنوان Reference Type شناخته میشوند، دسترسی به آنها بر اساس ارجاع است و برخلاف نوع دادههای Value Type، تغییرات در یک رشته مستقیماً بر روی دادههای آن اثر نمیگذارد. یکی از ویژگیهای منحصر به فرد رشتهها در C# این است که آنها میتوانند شامل کاراکترهای null (‘\۰’) در هر نقطهای از رشته باشند، بدون اینکه پایان رشته را تحت تأثیر قرار دهند. این ویژگی به برنامهنویسان این امکان را میدهد که رشتهها را با انعطاف بیشتری مدیریت کنند.
در نهایت، درک نحوه عملکرد رشته ها در سی شارپ #C برای هر برنامهنویس اهمیت زیادی دارد، چرا که استفاده بهینه از این نوع داده میتواند به بهبود کارایی و سهولت کدنویسی کمک کند. با یادگیری و استفاده از ویژگیها و متدهای مختلف کلاس System.String، میتوان از قدرت رشتهها به شکلی مؤثر و کارآمد بهرهبرداری کرد.
اگرچه رشته ها در سی شارپ #C به صورت ساده و قابل فهم به نظر میرسند، اما پیچیدگیهایی همچون مدیریت حافظه، کاراکترهای null و ویژگیهای مربوط به immutable بودن آنها، باعث میشود که درک صحیح و استفاده بهینه از این ویژگیها از اهمیت بالایی برخوردار باشد.
واقعا مقاله بسیار کاملی بود. ممنون از شما