PDA

View Full Version : تعدا دفعات تکرار یک رشته در رشته دیگر



habedijoo
چهارشنبه 23 فروردین 1385, 15:59 عصر
سلام به همگی
خیلی سرچ زدم ولی مطلبی عینا با این مورد پیدا نکردم .

آیا تابعی وجود دارد که تعداد دفعات تکرار یک جمله را در یک رشته بدهد . ( تابع داخلی دات نت ) .

البته خودم با یک راه این کار رو انجام دادم ولی میخواستم ببینم تابع عینی برای این مورد هست .
( MSDN رو هم گشتم )

Mehdi Asgari
چهارشنبه 23 فروردین 1385, 20: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, 07:11 صبح
سلام به همگی

مثل اینکه تابع خاصی وجود نداره .

بهترین روش که من خودم ازش استفاده کردم تابع Split هست . این تابع یک رشته را بوسیله کاراکتر یا رشته delimiter یا جدا کننده تکه تکه میکند .
لذا کافی ست کلمه مورد نظر را به عنوان جدا کننده به همراه رشته مورد نظر به تابع ارسال کنید . این تابع به شما آرایه ای بر میگرداند که طول آرایه یکی بیشتر از تعداد دفعات تکرار کلمه مورد نظر است


Dim str as string = "Defautl String"
Dim strSearch() as string = "Search"

msgbox(Split(str,strSearch).Length-1)


دوست عزیز از شما هم که وقت گذاشتید و نظرتون رو کامل توضیح دادید ممنونم