جستجو کردن در رشته ها

جستجوي رشته‌ها به وسيله متدهاي دات نت بسيار راحت است. اجازه بدهيد که نگاهي به متدهاي مختلفي که محل وقوع يک رشته خاص را پيدا می‌کنند بيندازيم. متدهاي ()IndexOf و ()LastIndexOf محل يک رشته خاص را در رشته ديگر نشان می‌دهند. اگر رشته مورد نظر پيدا نشود متدهاي فوق مقدار 1- را بر می‌گردانند. به مثالي در مورد متد ()IndexOf توجه کنيد :

string str = "The quick brown fox jumps over the lazy dog.";
int index = str.IndexOf("quick");

Console.WriteLine(str);
Console.WriteLine("quick was found at position " + index);
The quick brown fox jumps over the lazy dog.
quick was found at position 4

متد ()IndexOf يک رشته را که شما به دنبال آن هستيد را دريافت می‌کند. در مثال بالا متد مقدار 4 را بر می‌گرداند چون انديس کلمه quick عدد 4 است. به ياد داشته باشيد که انديس يا مکان از صفر شروع شده و تا 1- طول ادامه می‌یابد بنابراين کاراکتر پنجم داراي انديس 4 است. متد ()LastIndexOf کمي متفاوت است :

string str = "A very very very good day.";
int index = str.LastIndexOf("very");

Console.WriteLine(str);
Console.WriteLine("Last occurrence of very was found at position " + index);
A very very very good day.
Last occurrence of very was found at position 12

متد ()LastIndexOf بسيار شبيه متد ()IndexOf با اين تفاوت که انديس آخرين محل وقوع رشته را بر می‌گرداند. در کد بالا آخرين محل وقوع کلمه “very” انديس 12 است. اگر يک رشته خاص در هنگام جستجو پيدا نشود اين دو متد مقدار 1- را بر می‌گردانند.

string str1 = "This is a sample string.";

Console.WriteLine(str1);

if (str1.IndexOf("Whatever") == -1)
{
    Console.WriteLine(""Whatever" was not found in the string.");
}
This is a sample string.
"Whatever" was not found in the string.

يکي ديگر از سربارگذاري هاي اين دو متد اين است که يک آرگومان دومي را قبول می‌کنند، که محل شروع جستجو را تعيين می‌کند. به تکه کد زير توجه کنيد :

string str1 = "This is a sample string.";

Console.WriteLine(str1);

if (str1.IndexOf("This", 5) == -1)
{
    Console.WriteLine(""This" was not found in the string.");
}

همانطور که مشاهده می‌کنید، با وجوديکه کلمه this در جمله بالا وجود دارد، ولي چون ما محل شروع جستجو در رشته را از انديس 5 انتخاب کرده‌ایم، کلمه پيدا نمی‌شود. اگر بخواهيم تمام محل‌های وقوع يک کلمه را پيدا کنيم می‌توان به صورت زير عمل کنيم :

int position = 0;
string str1 = "This is a long long long string...";
do
{
    position = str1.IndexOf("long", position);

    if (position != -1)
        Console.WriteLine(position);

    position++;
} while (position > 0);
10
15
20

متد ()Contains هم می‌تواند چک کند که آيا يک رشته در داخل رشته ديگر وجود دارد يا نه.

string str1 = "This is a sample string.";

Console.WriteLine(str1);

if (str1.Contains("sample"))
{
   Console.WriteLine(""sample" exists in the string.");
}
This is a sample string.
"sample" exist in the string.

اين متد، اگر رشته مورد نظر وجود داشته باشد، مقدار true و اگر وجود نداشته باشد، مقدار false را بر می‌گرداند. هر دو متد ()StartsWith و ()EndsWith براي يافتن يک رشته در ابتدا و انتهاي يک رشته خاص به کار می‌روند.

string str1 = "Apple";

Console.WriteLine(str1);

if (str1.StartsWith("A"))
{
    Console.WriteLine("The word starts with A.");
}
if (str1.EndsWith("e"))
{
    Console.WriteLine("The word ends with e.");
}
Apple
The word starts with A.
The word ends with e.