آموزش دستکاری رشته ها در سی شارپ
استفاده ی ما از رشته ها تاکنون عبارت بوده است از نوشتن رشته ها در کنسول، و به هم پیوستن رشته ها با استفاده از عملگر + .در طول برنامه نویسی بیشتر اپلیکیشن های جالب، کشف خواهید کرد که دستکاری رشته ها چیزی است که در نهایت با آن کارهای زیادی انجام می دهیم. بنابراین، ارزش دارد چند صفحه را به آن اختصاص دهیم تا نگاهی به برخی از متداول ترین فنون دستکاری رشته که در سی شارپ در دسترس است، بیاندازیم.
برای شروع، خوب است بدانیم که یک متغیر از نوع string(رشته) می تواند به صورت یک آرایه ی فقط خواندنی(read-only) از متغیرهای char باشد. این یعنی، ما می توانیم با استفاده از سینتکسی مانند زیر، به کاراکترهای تکی، دسترسی داشته باشیم:
string myString = "A string";
char myChar = myString[1];
اما، ما نمی توانیم در این روش، کاراکترهای تکی را انتساب دهیم. برای دریافت یک آرایه ی char که بتوانیم روی آن کاراکتری بنویسیم، می توانیم از کد زیر استفاده کنیم. این کد از فرمان ToCharArray() از این متغیر آرایه استفاده می کند:
string myString = "A string";
char[] myChars = myString.ToCharArray();
آنگاه می توانیم آرایه ی char را به روش استاندارد، دستکاری کنیم. ما همچنین می توانیم از رشته ها در حلقه های foreach استفاده کنیم، همان طور که در زیر نشان داده شده است:
foreach (char character in myString)
{
WriteLine($"{character}");
}
مانند آرایه ها، ما همچنین می توانیم تعداد عناصر را با استفاده از دستور myString.Length به دست بیاوریم. این دستور به ما امکان می دهد تا تعداد کاراکترهای درون رشته را به دست بیاوریم:
string myString = ReadLine();
WriteLine($"You typed {myString.Length} characters.");
یک فن دستکاری رشته ی دیگر، استفاده از فرمان ها با فرمتی مشابه با فرمان <string>.ToCharArray() است. دو دستور ساده و مفید، دستور <string>.ToLower() و <string>.ToUpper() هستند. این دستورات به رشته ها امکان می دهند تا به ترتیب به حروف کوچک و به حروف بزرگ تبدیل شوند.
برای اینکه ببینیم چرا این دستورات مفید است، موقعیتی را در نظر بگیرید که می خواهیم از یک کاربر، یک پاسخ خاص، مانند رشته ی yes، را دریافت کنیم. اگر رشته ی مورد نظر وارد شده توسط کاربر را به حروف کوچک تبدیل کنیم، آنگاه می توانیم رشته های YES و Yes و yeS و غیره را نیز بررسی کنیم. در فصل قبل، یک مثال از این موضوع را مشاهده کرده اید:
string userResponse = ReadLine();
if (userResponse.ToLower() == "yes")
{
// Act on response.
}
این دستور مانند دیگر دستورات درون این بخش، در واقع رشتهای که روی آن اعمال میشود را تغییر نمیدهد. به جای آن، ترکیب این فرمان با یک رشته منجر به ایجاد یک رشته ی جدید می شود؛ که می توانیم آن را با رشته ی دیگری (که در اینجا نشان داده شده است) مقایسه کنیم یا آن را به یک متغیر دیگر انتساب دهیم.
می توانیم مقدار دستور ToLower() را در یک متغیر قرار دهیم:
userResponse = userResponse.ToLower();
این نکته ی مهمی است که باید به یاد داشته باشید، زیرا نوشتن این عبارت کار زیادی انجام نمی دهد:
userResponse.ToLower();
کارهای دیگری وجود دارد که می توانیم انجام دهیم تا ورودی کاربر را ساده کنیم. چه می شود اگر کاربر به طور تصادفی یک فاصله سفید(space) را در ابتدا یا انتهای ورودی(input) قرار دهد؟ در این صورت، کد بالا کار نخواهد کرد. ما نیاز داریم رشته ی وارد شده را کوتاه(trim) کنیم؛ برای انجام این کار می توانیم از فرمان <string>.Trim() استفاده کنیم:
string userResponse = ReadLine();
userResponse = userResponse.Trim();
if (userResponse.ToLower() == "yes")
{
// Act on response.
}
کد بالا می تواند رشته هایی مانند زیر را تشخیص دهد:
" YES"
"Yes "
ما همچنین می توانیم از این دستورات برای حذف دیگر کاراکترها، با مشخص کردن آنها در یک آرایه ی char ، استفاده کنیم. بعنوان مثال:
char[] trimChars = {' ', 'e', 's'};
string userResponse = ReadLine();
userResponse = userResponse.ToLower();
userResponse = userResponse.Trim(trimChars);
if (userResponse == "y")
{
// Act on response.
}
این کد، هرگونه وقوع فاصله های سفید را علاوه بر "e" و "s" در ابتدا یا در انتهای رشته، از بین می برد. در صورتی که هیچ کاراکتر دیگری در رشته وجود نداشته باشد، منجر به تشخیص رشتههایی مانند موارد زیر خواهد شد:
"Yeeeees"
" y"
و به همین ترتیب. ما همچنین می توانیم از دستور <string>.TrimStart() و <string>.TrimEnd() استفاده کنیم؛ که فاصله های سفید(space) را به ترتیب از ابتدا و از انتهای یک رشته حذف می کنند. اینها همچنین میتوانند آرایههای کاراکتری مشخص شده ای داشته باشند.
برای دستکاری فاصله گذاری(spacing) رشته ها، می توانیم از دو فرمان رشته ای دیگر، یعنی از <string>.PadLeft() و <string>.PadRight() استفاده کنیم. این دستورات به ما امکان می دهند تا فاصله های سفید(space) را به سمت چپ یا راست یک رشته اضافه کنیم تا آن را مجبور کنیم که به یک طول دلخواه برسد. به صورت زیر، می توانیم از آنها استفاده کنیم(به جای X می توانیم از کلمه ی Left یا Right استفاده کنیم):
<string>.PadX(<desiredLength>);
به مثال زیر توجه کنید:
myString = "Aligned";
myString = myString.PadLeft(10);
این دستورات باعث می شود که سه فاصله ی خالی(space) در سمت چپ کلمه ی Aligned در myString اضافه شود(دقت کنید که این کلمه، 7 حرف دارد). این متدها وقتی مفید هستند که بخواهیم رشته ها را در ستون ها تراز(align) کنیم؛ که به ویژه برای تعیین موقعیت رشته هایی که حاوی عدد هستند، مفید است.
مانند دستورات trim، ما همچنین می توانیم از این دستورات بعنوان یک راه دوم، استفاده کنیم؛ یعنی یک کاراکتر را به آن ارائه دهیم تا یک رشته را با آن پر کند. این شامل یک کاراکتر(char) تکی می شود، نه یک آرایه ها از کاراکترها، مانند trim :
myString = "Aligned";
myString = myString.PadLeft(10, '-');
دستور بالا، باعث می شود سه خط تیره(dash) در ابتدای myString قرار گیرد. از این فرمان های دستکاری رشته، تعداد بسیار زیادی وجود دارد؛ بسیاری از آنها تنها در موقعیت های بسیار خاص مفید هستند. این دستورات، همان طور که از آنها استفاده می کنیم، در فصل های آینده توضیح داده خواهند شد.
قبل از اینکه ادامه دهیم، ارزش دارد به یکی از ویژگی های اضافه شده در ویژوال استودیوی 2017 که ممکن است در فصل های قبلی متوجه آن شده باشید، نگاهی بیندازیم. در خودتان امتحان کنید زیر، از ویژگی تکمیل خودکار(auto-completion) استفاده می کنیم. که به موجب آن، IDE تلاش می کند با پیشنهاد کدهایی که ممکن است بخواهیم وارد کنیم، به ما کمک کند.
خودتان امتحان کنید: تکمیل خودکار در ویژوال استودیو: Ch05Ex06\Program.cs
1. یک اپلیکیشن کنسول جدید در ویژوال استدویو به نام Ch05Ex06 ایجاد کنید و آن را در آدرس زیر ذخیره کنید:
C:\BeginningCSharp7\Chapter05
2. کد زیر را در فایل Program.cs تایپ کنید؛ دقیقاً همان طور که نوشته ایم؛ به پنجرههایی که هنگام انجام این کار ظاهر میشوند توجه کنید:
static void Main(string[] args)
{
string myString = "This is a test.";
char[] separator = {' '};
string[] myWords;
myWords = myString.
}
3. همان طور که نقطه ی آخر را تایپ می کنیم، پنجره ی تصویر 5.12 ظاهر خواهد شد:
(تصویر 5.12)

4. بدون اینکه نشانگر ماوس را حرکت دهید، عبارت sp را تایپ کنید. پنجره ی نشان داده شده تغییر می کند و تولتیپ(Tooltip) نشان داده شده در تصویر 5.13 ظاهر می شود.
(تصویر 5.13)

5. کاراکترهای se) را تایپ کنید(یک پنجره ی دیگر و تولتیپ نمایش داده می شود. مانند تصویر 5.14.
6. حالا دو کاراکتر ;( را تایپ کنید. کد ما به صورت زیر خواهد بود و پنجره ی مورد نظر باید محو شود:
string myString = "This is a test.";
char[] separator = {' '};
string[] myWords;
myWords = myString.Split(separator);
}
(تصویر 5.14)

7. کدهای زیر را اضافه کنید؛ به پنجره هایی که بالا می آیند توجه کنید(فراموش نکنید که عبارت زیر را به کدها اضافه کنید:
using static System.Console;
static void Main(string[] args)
{
string myString = "This is a test.";
char[] separator = {' '};
string[] myWords;
myWords = myString.Split(separator);
foreach (string word in myWords)
{
WriteLine($"{word}");
}
ReadKey();
}
8. کدها را اجرا کنید. نتیجه باید مانند تصویر 5.15 باشد.
(تصویر 5.15)

این کدها چگونه کار می کنند
دو جنبه اصلی این کد عبارتند از دستور string جدید به کار رفته و استفاده از قابلیت تکمیل خودکار است. دستور <string>.Split() با شکافتن یک رشته در نقاط مشخص شده، آن را به یک آرایه ی رشته ای تبدیل می کند. این نقاط به شکل یک آرایه کاراکتری(char) هستند که در این مورد به سادگی توسط یک عنصر واحد، یعنی کاراکتر فاصله، جدا میشوند:
char[] separator = {' '};
کد زیر، زیر رشته هایی که وقتی رشته ی ما در هر فاصله(space) جدا می شوند را به دست می آورد. یعنی یک آرایه از کلمات تکی را دریافت می کنیم:
string[] myWords;
myWords = myString.Split(separator);
سپس، روی این کلمات این آرایه با استفاده از foreach حلقه می زنیم و هریک از آنها را در کنسول می نویسیم:
foreach (string word in myWords)
{
WriteLine($"{word}");
}
نکته: هر کلمه ی به دست آمده، هیچ فاصله ی سفیدی(space) ندارد؛ چه در بین کلمه، و چه در دو انتهای آن. وقتی که از Split() استفاد می کنیم، جداکننده ها(separators) حذف می شوند.
برای دانلود کدهای تمرینی این کتاب، به اولین صفحه ی این آموزش مراجعه کنید. لینک فایل برای دانلود قرار گرفته است.
- بازدید: 52
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.