السلاسل النصية
s="Hello, World. Sup!?"
puts s
#output: Hello, World. Sup!?
length
هى طريقة تعيد عدد حروف في سلسلة نصية string
s="this is a string"
puts s.length
#output: 16
upcase/upcase!
ال upcase هى طريقة تقوم بإعادة نسخة من السلسلة النصية ولكن بحروف uppercase
ال upcase! هى destructive طريقة تقوم بالتعديل على السلسلة النصية نفسها وتحويلها ل uppercase
x=s.upcase #returns a copy "upcase"
puts x
#output: HELLO, WORLD. SUP!?
puts s
#output: Hello, World. Sup!?
s.upcase! #destructive method!
puts s
#output: HELLO, WORLD. SUP!?
downcase/downcase!
ال downcase هى طريقة تقوم بإعادة نسخة من السلسلة النصية ولكن بحروف lowercase
ال downcase! هى destructive طريقة تقوم بالتعديل على السلسلة النصية نفسها وتحويل الحروف إلى lowercase
x=s.downcase #returns a copy "downcase"
puts x
#output: hello, world. sup!?
puts s
#output: HELLO, WORLD. SUP!?
s.downcase! #destructive method
puts s
#output: hello, world. sup!?
capitalize/capitalize!
capitalize هى طريقة تقوم بإعادة نسخة من السلسلة النصية ولكن اول حرف فيه يكون capital
capitalize! هى destructive طريقة تقوم بالتعديل على السلسلة النصية نفسها وتحويل اول حرف فيه إلى capital
reverse/reverse!
reverse هى طريقة تقوم بإعادة نسخة من السلسلة النصية ولكن معكوس الحروف
reverse هى طريقة تستخدم فى عكس السلسلة النصية نفسها
s="this is a string"
revS=s.reverse #returns a reversed copy of the string
puts revS
#output: gnirts a si siht
s.reverse! #modify the object, reverse it!
puts s
#output: gnirts a si siht
indexing
السلاسل النصية لها علاقة وثيقة بالمصفوفات. فى بعض اللغات لا تعترف بشي اسمه سلسلة نصية وتعتبرها بدلا عن ذلك مجرد مصفوفة من الحروف مثل ال C !
ففى بعض الأشياء المشتركة بين السلاسل النصية والمصفوفات مثل الفهارس ، وتبدأ أيضا بالصفر.
فإنت تستطيع أن تحصل على الحرف الموجود ب index معين
String[index]
اول حرف سيكون فهرسه هو 0
لاحظ أن القيمة التي ستعاد هي قيمة ال char من جدول ال ASCII فلذا سنستخدم chr method لتحويل ال integer value إلى character
الحرف الأخير سيكون فهرسه هو -1
puts s[0]#first, returns the ascii value
#output: 116
puts s[0].chr #converted to a char
#output: t
puts s[-1] #last, returns the ascii value
#output: 103
puts s[-1].chr #converted to a char
#output: g
String[From..To]
تقوم بإعادة كل الحروف من ال From لل To
puts s[1..4]
#output: his
index
هي طريقة تعيد لنا ترتيب الحروف فى string أو ترتيب اول ظهور لتعبير مثلا التالى
s="this is a string"
puts s.index("i")
#output 1
هنا الطريقة تعيد لنا ترتيب اول i هى قابلتها وهى فى الindex 2
نقدر نعدل كيفية الإستخدام بإننا نضيف ال offset او مكان البداية فى البحث بال string كالتالى
s="this is a string"
puts s[8..s.length]
#a string
puts s.index("i", 8)
#output: 13
count
هى طريقة تقوم بإعادة عدد مرات تكرار char او expression فى ال string مثلا كالتالى
s="this is a string"
puts s.count("i") #count how many iS in s
#output: 3
empty?
هى طريقة تختبر إذا كان ال string فارغ أم لا
puts "it's empty" if "hello".empty?
include?(char)/include?(substring)
نختبر بها وجود char او substring فى ال string نفسه أم لا
puts s.include?("w") #has "w" char
#output: true
puts s.include?("he") #has "he" substring ?
#output: true
chomp/chomp!
chop/chop!
chop :هى طريقة تقوم بحذف الحرف الأخير من ال string وإذا واجهت \n\r بتقوم بحذفهم هما الإثنين!
من غير المحبذ إستخدامها..
chop! هى نفس عمل السابقة ولكن تقوم بالتعديل على ال string لأنها طريقة destructive
إرشاد: يفضل إستخدام chomp
chomp/chomp!(separator)
chomp هى طريقة تقوم بإعادة نسخة من السلسلة النصية مع حذف الحرف الأخير separator وهو \n او \r او كلاهما افتراضيا إلا إذا حددت إنت ال separator
chomp! هى نفس عمل السابقة وإنما التعديل بيكون على ال string نفسه لأنها destructive ميثود
puts "Hello, World\n".chomp
#output: Hello, World
puts "Hello, World\r\n".chomp
#output: Hello, World
puts "Hello, World\r".chomp
#output: Hello, World
puts "Hello, \nWorld".chomp
#output:Hello,
#World
puts "Hello, World.".chomp("d.")
#output: Hello, Worl
puts "Hello, World!".chomp("!")
#output: Hello, World
concat
هى طريقة تستخدم فى دمج اكثر من string
s="Hello, "
s.concat("World!")
puts s
#output: Hello, World!
s="Hello, "
s << "World!"
puts s
#output: Hello, World!
s="Hello, "
s += "World!"
puts s
#output: Hello, World!
Comparing
s1="Hello"
s2="Hello"
s3="hello"
puts "s1 equals s2" if s1.eql?(s2)
puts s1.casecmp(s3) #it doesn't care about the case
puts "s1 == s3" if s1==s3 #it doesn't match it!
#output:
s1 equals s2
0
scan(pattern)
هى طريقة تستخدم فى عمل مسح على نمط معين فى السلسلة النصية وتعيدهم فى صورة مصفوفة
chars=s.scan(/./)
p chars #inspect
#output: ["h", "e", "l", "l", "o", ",", " ", "w", "o", "r", "l", "d", ".", " ", "s", "u", "p", "!", "?"]
s="Hello, World, Test, what?"
scann=s.scan(/\w+/) #scan for word+char
p scann
#output: ["Hello", "World", "Test", "what"]
split(separator)
هى طريقة تستخدم فى عمل split ل separator وتعيد array ..
words=s.split(' ') #split the space separator.
p words
#output: ["hello,", "world.", "sup!?"]
join(separator)
هى طريقة تستخدم فى عمل join لعناصر ال array وإعادة string
joinedString=words.join(' ')
#join the array elements with a separator
puts joinedString
#output: hello, world. sup!?
joinedString=words.join('<>')
#join the array elements with a separator
puts joinedString
#output: hello,<>world.<>sup!?
gsub(pat, replacement), gsub!(pat, replacement)
هى طريقة تستخدم فى إستبدال pat ب replacement
s="Hello"
puts s.gsub('e', '3')
#output: H3llo
puts s.gsub('lo', '10')
#output: Hel10
s="I LOVE Ruby!"
puts s.gsub(/Ruby/, "Python")
#output: I LOVE Python!
freeze, frozen?
Freeze هي طريقة تمنع الكائن من التعديل عليه
frozen? هى طريقة تستخدم فى إختبار هل الكائن تم تنفيذ freeze عليه أم لا
s="Hello"
s.freeze
s.
s << ", World!" #can't be done as "s" is frozen!
puts "freezed!" if s.frozen?
to_s
هى طريقة تعبر عن ال object فى حالة إستخدام puts معاه
to_i
هى طريقة تعبر عن ال object فى حالة محاولة تحويله ل int
to_f
هى طريقة تعبر عن ال object فى حالة تحويله ل float
to_a
هى طريقة تعبر عن ال object فى حالة تحويله ل array
to_hash
هى طريقة تعبر عن ال object فى حالة تحويله ل hash
مثال على ال OOP/Strings بإضافة طريقة جديدة لل String Class وهى atbash
class String
def atbash
a=('a'..'z').to_a
aRev=a.reverse
s=self.downcase
res=""
for char in s.scan(/./)
if a.include?(char)
res << aRev[a.index(char)]
else
res << char
end
end
return res
end
end
s="Hello"
puts s.atbash
#output: svool
لاحظ إن ال self هى ال string !
مثال آخر وهو إضافة ال rot13 method لل String Class
class String
def rot13
self.tr("A-Ma-mN-Zn-z","N-Zn-zA-Ma-m")
end
end
puts “ahmed”.rot13
#output: nuzrq
Heredoc string
بكل بساطة هو string يمتد على اكثر من سطر multi-line string
heredocString=<<start
Hello,
i
am
a multi-line
string
start
puts heredocString
لاحظ إنك أنت الذي تحدد ال tag الخاص بالبداية بس بشرط إنك تقفل بها ال string وهنا انا إستخدمت start مثلا!
#output:
Hello,
i
am
a multi-line
string
ملحوظة بخصوص ال symbols
اعتبر ال symbol كانه string ولن يتغير خلال الruntime ولن تحتاج فيه للطرق الخاصة بال string ويفضل استخدامها كمفاتيح لل للهاش تيبلز
للمزيد اطلع هنا
http://www.troubleshooters.com/codecorn/ruby/symbols.htm