View Full Version : تعدا دفعات تکرار یک رشته در رشته دیگر
habedijoo
چهارشنبه 23 فروردین 1385, 16:59 عصر
سلام به همگی
خیلی سرچ زدم ولی مطلبی عینا با این مورد پیدا نکردم .
آیا تابعی وجود دارد که تعداد دفعات تکرار یک جمله را در یک رشته بدهد . ( تابع داخلی دات نت ) .
البته خودم با یک راه این کار رو انجام دادم ولی میخواستم ببینم تابع عینی برای این مورد هست .
( MSDN رو هم گشتم )
Mehdi Asgari
چهارشنبه 23 فروردین 1385, 21:35 عصر
سلام
من دو راه به ذهنم رسید :
فرض کنیم که رشتۀ ما در s و رشته ای که میخوایم جستجو کنیم در t قرار داره:
راه اول : استفاده از متد IndexOf از کلاس String
Dim s As String = "Hello xyz, the search pattern is xyz. not xYz"
Dim t As String = "xyz"
Dim index As Integer = s.IndexOf(t)
Dim numberOfOccurrences As Integer = 0
While index <> -1
numberOfOccurrences += 1
index = s.IndexOf(t, index + t.Length)
End While
Console.WriteLine("Number of occurrences: {0}", numberOfOccurrences)
روش دوم که بنده فکر میکنم بهتر باشه ، استفاده از Regular Expressions هست:
(البته باید System.Text.RegularExpressions روImport کنید)
Dim s As String = "Hello xyz, the search pattern is xyz. not xYz"
Dim t As String = "xyz"
Dim numberOfOccurrences As Integer = 0
If (Regex.IsMatch(s, t)) Then
numberOfOccurrences = Regex.Matches(s, t).Count
End If
Console.WriteLine("Number of occurrences: {0}", numberOfOccurrences)
در ضمن یه خوبی این روش در اینه که میتونین حساس بودن (یا نبودن) به کوچیکی حروف و بزرگ
رو کنترل کنید (از طریق آرگومان سوم متدهای IsMatch و Matches با مقدار RegexOptions.IgnoreCase)
در مثال قبل عدد 2 در خروجی چاپ خواهد شد ، منتها اگه گزینۀ IgnoreCase رو هم استفاده کنیم
عدد 3 چاپ خواهد شد (به خاطر xYz )
(اگر s چندین خط باشه ، باید گزینۀ RegexOptions.Multiline رو هم همراه با دیگر
مقادیر در آرگومان سوم ، OR کنیم)
habedijoo
پنج شنبه 24 فروردین 1385, 08:11 صبح
سلام به همگی
مثل اینکه تابع خاصی وجود نداره .
بهترین روش که من خودم ازش استفاده کردم تابع Split هست . این تابع یک رشته را بوسیله کاراکتر یا رشته delimiter یا جدا کننده تکه تکه میکند .
لذا کافی ست کلمه مورد نظر را به عنوان جدا کننده به همراه رشته مورد نظر به تابع ارسال کنید . این تابع به شما آرایه ای بر میگرداند که طول آرایه یکی بیشتر از تعداد دفعات تکرار کلمه مورد نظر است
Dim str as string = "Defautl String"
Dim strSearch() as string = "Search"
msgbox(Split(str,strSearch).Length-1)
دوست عزیز از شما هم که وقت گذاشتید و نظرتون رو کامل توضیح دادید ممنونم
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.