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

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

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

puts str
print("quick was found at position " , index)
The quick brown fox jumps over the lazy dog.
quick was found at position 4

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

str = "A very very very good day."
index = str.rindex("very")

puts str
print("Last occurrence of very was found at positiont " , index)
A very very very good day.
Last occurrence of very was found at position 12

متد ()rindex بسيار شبيه متد ()index با اين تفاوت که انديس آخرين محل وقوع رشته را بر می‌گرداند. در کد بالا آخرين محل وقوع کلمه “very” انديس 12 است. به مثال دیگر توجه کنید:

str1 = "This is a sample string."

puts str1

if (str1.index("Whatever") == nil)
  puts "\"Whatever\" was not found in the string."
end
This is a sample string.
"Whatever" was not found in the string.

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

str1 = "This is a sample string."

puts str1

if  str1.index("This", 5)
  puts "\"This\" was not found in the string."
end

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

str1 = "This is a long long long string..."

position = 0

while position <= str1.length
  position = str1.index("long", position)

  if position != nil
    puts position
  end

  position += 1
end
10
15
20

از دو روش می توان چک کرد که آیا يک رشته در داخل رشته ديگر وجود دارد يا نه. روش اول استفاده از متد ()?include است:

str1 = "This is a sample string."

puts str1

if str1.include?("sample")
  print("\"sample\" exists in the string.")
end
This is a sample string.
"sample" exist in the string.

دو متد ()?start_with و ()?start_with براي يافتن يک رشته در ابتدا و انتهاي يک رشته خاص به کار می‌روند.

str1 = "Apple"

puts str1

if (str1.start_with?("A"))
  puts "The word starts with A."
end

if (str1.end_with?("e"))
  puts "The word ends with e."
end
Apple
The word starts with A.
The word ends with e.