متد IndexOf
نام دوره: زبان سی شارپ مقدماتی
نویسنده: علی مقدم جاه (مدرس دوره)
کاربرد متد IndexOf چیست؟
همانطور که میدانید، متدها بلد هستند تا برای برنامهنویسها یک کار یا چندین کاری که بلد هستند را انجام دهند.
متد IndexOf وظیفه پیدا کردن شماره اندیس خانه کاراکتر یا اولین کاراکتر از رشتهای که به آن میدهیم را برایمان جستجو کند:
- جستجو کاراکتر
string name = "ali";
int index = name.IndexOf('i');
Console.WriteLine(index);
:خروجی
2
در این مثال، متغیر name متد IndexOf را فراخوانی کرده که به معنای این است که حتما باید عملیات جستجو در محتوای داخل ظرف name از نوع string انجام شود.
همچنین در پرانتز این متد، کاراکتر ‘i’ را با حروف کوچک به عنوان ورودی به متد IndexOf ارسال کردیم، پس متد IndexOf به دنبال کاراکتر i در رشته name گشته و شماره خانه آن را برای ما بر میگرداند.
از آنجایی که شمارش در دنیای برنامهنویسی از صفر شروع میشود، در نتیجه کاراکتر A در خانه صفرم، کاراکتر L در خانه یکم و کاراکتر i در خانه دوم قرار دارد.
خروجی متد IndexOf از نوع Int است، پس ظرف int index را آماده کردیم تا عدد 2 را پس از بازگردانی در آن نگهداری کند.
نکته: بزرگی و کوچکی حروف به شدت مهم هستند، اگر به جای کاراکتر ‘l’ از کاراکتر ‘L’ استفاده کنید، چون نمیتواند L بزرگ را پیدا کند برای ما عدد 1- را بر گردانده که به معنای عدم جستجوی موفق است.
2. جستجو رشته
در مثال بالا دیدید که وقتی کاراکتری را به عنوان ورودی متد IndexOf ارسال میکنیم، به دنبال شماره خانهای که آن کاراکتر در آن قرار دارد رفته و برای ما اندیس آن خانه را بر میگرداند.
اما ما میتوانیم به جای یک کاراکتر، به متد IndexOf رشته ارسال کنیم، اما باید بدانیم که متد IndexOf به دنبال اولین کاراکتر از رشتهای که به آن دادهایم رفته و شماره اندیس اولین کاراکتر را برای ما باز می گرداند:
string name = "ali moghaddam jah";
int index = name.IndexOf("jah");
Console.WriteLine(index);
خروجی
14
در مثال بالا، با وجود اینکه گفتیم به دنبال “jah” بگرد، اما شماره اندیس کاراکتر ‘j’ را که اولین کاراکتر از رشتهای است که به عنوان ورودی به متد IndexOf ارسال شده است.
پس نتیجه میگیریم که به متد IndexOf میتوانیم هر دو نوع ورودی رشته یا کاراکتر را ارسال کنیم.
آیا متد IndexOf تنها یک ورودی دارد؟>
خیر، متد IndexOf حالتهای مختلفی برای دریافت ورودی داشته و ما در مثالهای بالا تنها از حالت یک ورودی استفاده کردیم که باعث شد ورودی مورد نظر را در تمام رشته از خانه صفرم تا خانه آخر جستجو کند.
اما میتوانیم برای متد IndexOf مشخص کنیم که از چه خانهای به بعد دنبال رشته یا کاراکتر مورد نظر ما بگردد:
string name = "ali moghaddam jah";
int index = name.IndexOf("m" , 10);
Console.WriteLine(index);
خروجی
13
در این مثال ورودی متد IndexOf حرف m بوده که چون اولین حرف m برای کلمه moghadam است، پس باید شماره اندیس 4 را به ما نشان میداد؛ اما چون برای آن مشخص کردهایم که از خانه ۱۰ به بعد عملیات جستجو را انجام بده، پس در اصل در رشته “am jah” به دنبال حرف m میگردد که باعث شده شماره اندیس ۱۳ را نمایش دهد.
سوال: رشته “am jah” که تنها ۶ کاراکتر داشته و به همین علت اندیس ها از ۰ تا ۵ هستند، پس چرا متد IndexOf عدد ۱۳ را برگردانده است؟
از آنجایی که برای متد IndexOf مشخص شده که از خانه ۱۰ به بعد عملیات جستجو را انجام دهد، پس تنها رشته “am jah” را بررسی میکند، اما همچنان حرف m در رشته “Ali Moghadam Jah” در خانه ۱۳ قرار داشته و به همین علت اندیس خانه را در کل ظرف name برای ما نشان میدهد.
نکته نهایی: پس متوجه شدیم که متد IndexOf عملیات جستجو را از اول به آخر انجام میدهد. درنتیجه مسیر حرکت جستجو متد IndexOf در رشته “Ali Moghadam Jah” از حرف A به سمت حرف h است.
جهت شرکت در دورههای زبان برنامه نویسی سیشارپ، از کد تخفیف heplc30 استفاده کنید.