日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Ruby之旅之字符串

發(fā)布時(shí)間:2023/12/14 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ruby之旅之字符串 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Ruby之旅之字符串

String

1、創(chuàng)建字符串的五種方式:

①一對(duì)單引號(hào)包圍字符 如: ‘hello’
②一對(duì)雙引號(hào)包圍字符 如: “hello”
③%q后面用一對(duì)分界符包圍的字符可以構(gòu)造單引號(hào)字符串 如:%q/hello world/
④%Q后面用一對(duì)分界符包圍的字符可以構(gòu)造雙引號(hào)字符串 如:%Q{hello world}
【Note】分界符可以是任何一對(duì)非字母數(shù)字的單字節(jié)字符,如() [] {} <> //
⑤here document構(gòu)建字符串,該方法比較適合用于多行字符串的創(chuàng)建。由<<和邊界字符串作為開(kāi)頭,由邊界字符串作為結(jié)尾
如:
str=<<EOS
Hello world,
I’m ruby!
EOS
puts str
#輸出結(jié)果為:
Hello world,
I’m ruby!
【Notes】
①ruby中并不會(huì)去掉字符串開(kāi)頭的空格;
代碼如下:
puts ’ hello,world’
輸出結(jié)果:
hello,world 【前面有兩個(gè)空格】
②一個(gè)由雙引號(hào)括起來(lái)的字符串允許字符由一個(gè)前置的斜杠引出,而且可以用#{}內(nèi)嵌表達(dá)式.
代碼如下:
str = “i am liming”
puts ‘hello,#{str}’
puts “hello,#{str}”
輸出結(jié)果:
hello,#{str}
hello,i am liming
③雙引號(hào)字符串能夠支持更多的轉(zhuǎn)義字符,而單引號(hào)只允許使用 \ 和 ’ 兩個(gè)反斜線符號(hào).
代碼如下:
puts ‘hello’ wo\rld\t!’
puts “helloworld\t!”
輸出結(jié)果:
hello’ wo\rld\t! #只對(duì)\和’進(jìn)行了轉(zhuǎn)義,\t原樣輸出
helloworld ! #d和!之間有一個(gè)制表符的長(zhǎng)度

2、字符串的拼接

① + 代碼如下:str1 = "hello"str2 = "world"puts str1+str2輸出結(jié)果:helloworld ② <<代碼如下:str1 = "super"str2 = "star"puts str1<<str2輸出結(jié)果:superstar ③+= 代碼如下:str1 = "tooyoung,"str2 = "toosimple!"puts str1+=str2輸出結(jié)果:tooyoung,toosimple!

【Notes】
當(dāng)執(zhí)行"+=“操作一個(gè)字符串時(shí),你得到的結(jié)果其實(shí)是一個(gè)新創(chuàng)建的String實(shí)例來(lái)保存結(jié)果,但是”<<"操作將直接將在原來(lái)的字符串上appanding新字符串

代碼如下:class A@@str1 = "All rivers"@@str2 = " run into sea!"def myMethod01puts @@str1.object_idputs @@str2.object_idstr3 = @@str1+=@@str2puts @@str1puts @@str2puts str3puts @@str1.object_idputs @@str2.object_idputs str3.object_idenddef myMethod02puts "=="*20puts @@str1.object_idputs @@str2.object_idstr4 = @@str1<<@@str2puts str4puts str4.object_idputs @@str1puts @@str2puts @@str1.object_idputs @@str2.object_id endenda = A.newa.myMethod01a.myMethod02輸出結(jié)果:700720All rivers run into sea!run into sea!All rivers run into sea!740720740========================================740720All rivers run into sea! run into sea!740All rivers run into sea! run into sea!run into sea!740720【分析】@@str1在方法myMethod01中的object_id由700->740,而@@str1在方法myMethod02中的object_id一直是740④str1.concat(str2):把字符串str2追加在str1的尾部代碼如下:str1 = "Actions speak louder"str2 = " than words."puts str1+=str2輸出結(jié)果:Actions speak louder than words. ③ * :把一個(gè)字符串重復(fù)好幾遍;代碼如下:str = "blah "puts str1*3輸出結(jié)果:blah blah blah

3、刪除字符串

(3.1)str.delete(other_str, …) 返回 str 的副本,參數(shù)交集中的所有字符會(huì)被刪除。
str.delete!(other_str, …) 與 delete 相同,但是 str 會(huì)發(fā)生變化并返回。

代碼如下:str = <<ST常記溪亭日暮,沉醉不知?dú)w路。 興盡晚回舟,誤入藕花深處。 爭(zhēng)渡,爭(zhēng)渡,驚起一灘鷗鷺。STp str.delete("爭(zhēng)渡,")輸出結(jié)果:常記溪亭日暮沉醉不知?dú)w路。 興盡晚回舟誤入藕花深處。 驚起一灘鷗鷺。

(3.2)去除字符串末尾子符
①str.chomp 從字符串末尾移除記錄分隔符($/),通常是 \n或\r。如果沒(méi)有記錄分隔符,則不進(jìn)行任何操作。
str.chomp! 與 chomp 相同,但是 str 會(huì)發(fā)生變化并返回。

代碼如下:str = "From saving comes having\n\r"p str.sizenew_str = str.chompp new_str.size輸出結(jié)果:2120②str.chop 去掉字符串末尾的最后一個(gè)字符,不管是\n\r還是普通字符str.chop! 與 chop 相同,但是 str 會(huì)發(fā)生變化并返回。代碼如下:str= "From short pleasure long repentance."p str.chop輸出結(jié)果:"From short pleasure long repentance②str.slice(fixnum) str.slice(fixnum, fixnum) str.slice(range) str.slice(regexp) str.slice(regexp, fixnum) str.slice(other_str)str.slice!(fixnum)str.slice!(fixnum, fixnum) str.slice!(range) str.slice!(regexp) str.slice!(other_str) 從 str 中刪除指定的部分,并返回刪除的部分。如果值超出范圍,參數(shù)帶有 Fixnum 的形式,將生成一個(gè) IndexError。參數(shù)為 range 的形式,將生成一個(gè) RangeError,參數(shù)為 Regexp 和 String 的形式,將忽略執(zhí)行動(dòng)作代碼如下:str = "我現(xiàn)在在南京市,雨花臺(tái)區(qū),鐵心橋"p str.slice(5,str.length-1)輸出結(jié)果:南京市,雨花臺(tái)區(qū),鐵心橋

4、修改字符串

(4.1)截取字符串
①str[索引] #返回該索引處的字符

代碼如下:word = "東風(fēng)夜放花千樹(shù),更吹落,星如雨"puts word[0]puts word[6]輸出結(jié)果:東樹(shù) ②str[起始位置索引,終止位置索引] str[起始位置索引..終止位置索引]#返回返回起始索引到終止索引閉區(qū)間的字符代碼如下:word = "寶馬雕,車香滿路。鳳簫聲動(dòng),玉壺光轉(zhuǎn),一夜魚(yú)龍舞。"puts word[0,-1]puts word[-1..-6]puts word[-6,-1]puts word[0..-1]puts word[0,(word.length-1)]puts word[0..(word.length-1)]puts word[9,18]puts word[-6..-1]輸出結(jié)果:輸出為空,當(dāng)索引中采用負(fù)數(shù)時(shí),應(yīng)該用范圍range的形式[m..n]輸出為空,當(dāng)索引中采用負(fù)數(shù)時(shí),應(yīng)該采用范圍range的形式[m..n],而不是[m,n]這種形式,且除特殊的[0,-1]之外,起止索引大小應(yīng)滿足【起始索引<終止索引】輸出為空,當(dāng)索引中采用負(fù)數(shù)時(shí),應(yīng)該用范圍range的形式[m..n]寶馬雕,車香滿路。鳳簫聲動(dòng),玉壺光轉(zhuǎn),一夜魚(yú)龍舞。寶馬雕,車香滿路。鳳簫聲動(dòng),玉壺光轉(zhuǎn),一夜魚(yú)龍舞寶馬雕,車香滿路。鳳簫聲動(dòng),玉壺光轉(zhuǎn),一夜魚(yú)龍舞。鳳簫聲動(dòng),玉壺光轉(zhuǎn),一夜魚(yú)龍舞。一夜魚(yú)龍舞。 ④str[起始位置索引...終止位置索引]代碼如下:word = "蛾兒雪柳黃金縷,笑語(yǔ)盈盈暗香去。眾里尋他千百度,驀然回首,那人卻在,燈火闌珊處。"puts word[0...-1]puts word[0...(word.length-1)]puts word[16,39]puts word[-6...-1]輸出結(jié)果:蛾兒雪柳黃金縷,笑語(yǔ)盈盈暗香去。眾里尋他千百度,驀然回首,那人卻在,燈火闌珊處蛾兒雪柳黃金縷,笑語(yǔ)盈盈暗香去。眾里尋他千百度,驀然回首,那人卻在,燈火闌珊處眾里尋他千百度,驀然回首,那人卻在,燈火闌珊處。燈火闌珊處 【Note】①正的索引指從字符串起始位置算起的偏移量②負(fù)的索引指從字符串尾(從右向左)算起的偏移量③索引從0開(kāi)始④當(dāng)索引中采用負(fù)數(shù)時(shí),應(yīng)該采用范圍range的形式[m..n],而不是[m,n]這種形式,且除特殊的[0,-1]之外,起止索引大小應(yīng)滿足【起始索引<終止索引】

(4.2)字符串拆分
語(yǔ)法: str.split(pattern, [limit])
參數(shù):
第一個(gè)參數(shù)pattern總是被作為間隔符來(lái)拆分字符串,并且不會(huì)出現(xiàn)在結(jié)果中;第一個(gè)參數(shù)可以是字符串,也可以是正則表達(dá)式,如果第一個(gè)參數(shù)在字符串str中沒(méi)有或正則匹配不到,就返回整個(gè)字符串。
第二個(gè)參數(shù)limit是用于對(duì)拆分的結(jié)果數(shù)組的元素個(gè)數(shù)進(jìn)行限制
①第一個(gè)參數(shù)如果是字符串,那么這個(gè)字符串中字符就會(huì)被當(dāng)作一個(gè)字符串分隔符使用。

代碼如下:str1 = "南京市:雨花臺(tái)區(qū):鳳寧路"p str1.split(':')str2 = "尋尋覓覓,冷冷清清,凄凄慘慘戚戚。"p str2.split(",")p str2.split(",",10)輸出結(jié)果:["南京市", "雨花臺(tái)區(qū)", "鳳寧路"]["尋尋覓覓", "冷冷清清", "凄凄慘慘戚戚。"] ②第一個(gè)參數(shù)pattern可以是正則表達(dá)式,str 在 pattern 匹配的地方被分割。當(dāng) pattern 匹配一個(gè)零長(zhǎng)度的字符串時(shí),str 被分割成單個(gè)字符。代碼如下:str = "三杯兩盞淡酒,怎敵他,晚來(lái)風(fēng)急?"p str.split(/,/)p str.split(//)p str.split(/,*/)輸出結(jié)果:["三杯兩盞淡酒", "怎敵他", "晚來(lái)風(fēng)急?"]["三", "杯", "兩", "盞", "淡", "酒", ",", "怎", "敵", "他", ",", "晚", "來(lái)", "風(fēng)", "急", "?"]["三", "杯", "兩", "盞", "淡", "酒", "怎", "敵", "他", "晚", "來(lái)", "風(fēng)", "急", "?"] ③第二個(gè)參數(shù)limit如果小于第一個(gè)參數(shù)在字符串str中的個(gè)數(shù),則被拆分成limit份;第二個(gè)參數(shù)等于0或者大于第一個(gè)參數(shù)在字符串str中的個(gè)數(shù),則相當(dāng)于沒(méi)有加第二個(gè)參數(shù)。代碼如下:str = "雁過(guò)也,正傷心,卻是舊時(shí)相識(shí)。"p str.split(',',2)p str.split(',',8)p str.split(',',0)p str.split(',')輸出結(jié)果:["雁過(guò)也", "正傷心,卻是舊時(shí)相識(shí)。"]["雁過(guò)也", "正傷心", "卻是舊時(shí)相識(shí)。"]["雁過(guò)也", "正傷心", "卻是舊時(shí)相識(shí)。"]["雁過(guò)也", "正傷心", "卻是舊時(shí)相識(shí)。"]

(4.2)在給定索引的字符處插入字符串
str.insert(index, other_str)
①正值索引在給定索引的字符前插入 other_str,修改 str。

代碼如下:str1 = "There is your heart"str2 ="no reason not to follow"p str1.insert(9,str2)輸出結(jié)果:"There is no reason not to followyour heart"②負(fù)值索引從字符串的末尾開(kāi)始計(jì)數(shù),并在給定字符后插入。代碼如下:str1 = "your heart and intuition"str2 = "have the courage to follow "p str1.insert(-25,str2)輸出結(jié)果:"have the courage to follow your heart and intuition"

(4.3)大小寫(xiě)轉(zhuǎn)換
①str.capitalize 把字符串第一個(gè)字符轉(zhuǎn)換成大寫(xiě)字母,把非首字母轉(zhuǎn)換成小寫(xiě)
str.capitalize! 把字符串第一個(gè)字符轉(zhuǎn)換成大寫(xiě)字母,把非首字母轉(zhuǎn)換成小寫(xiě)

代碼如下:str = "no cross, No crown"p str.capitalize輸出結(jié)果:"No cross, no crown"②str.downcase 返回 str 的副本,所有的大寫(xiě)字母會(huì)被替換為小寫(xiě)字母。str.downcase! 與 downcase 相同,代碼如下:str = "NO GAINS WITHOUT PAINS"p str.downcase輸出結(jié)果:"no gains without pains"③str.swapcase 返回 str 的副本,所有的大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母,所有的小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母。str.swapcase! 相當(dāng)于 String.swapcase,代碼如下:str = "absence MAKES"p str.swapcase輸出結(jié)果: "ABSENCE makes" ④str.upcase 返回 str 的副本,所有的小寫(xiě)字母會(huì)被替換為大寫(xiě)字母。操作是環(huán)境不敏感的,只有字符 a 到 z 會(huì)受影響。str.upcase! 改變 str 的內(nèi)容為大寫(xiě),如果沒(méi)有變化則返回 nil。代碼如下:str = "Absence makes the heart grow fonder"p str.upcase輸出結(jié)果:"ABSENCE MAKES THE HEART GROW FONDER"

(4.4)替換字符串
① str.sub(pattern, replacement) 在str副本上將找到的第一個(gè)匹配字符(串)用replacement替換,并返回
str.sub(pattern) { |match| block } 作用同上,這種重載形式允許執(zhí)行一段代碼
str.sub!(pattern, replacement) 執(zhí)行 String.sub 替換,并返回 str,如果沒(méi)有替換執(zhí)行,則返回 nil。
str.sub!(pattern) { |match| block } 作用同上,這種重載形式允許執(zhí)行一段代碼

代碼如下:str = <<ST我叫小芳,今年18歲,出生于2020-08-06 STp str.sub(/\d{4}-\d{2}-\d{2}/,'2002-09-09')輸出結(jié)果:"\t我叫小芳,今年18歲,出生于2002-09-09 \n"一個(gè)sub的應(yīng)用實(shí)例:module PublicCladef PublicCla.rand_str( len )chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_anewpass = ""1.upto(len) { newpass << chars[rand(chars.size-1)] }return newpassendendclass Ainclude PublicCla@@str = "請(qǐng)按如下路徑打開(kāi)practice.rb文件,D:/programe file/RubyCode"@@substr = PublicCla.rand_str(6)def generate_addr@@str.sub(/[A-Z]:\/[a-z]*\s[a-z]*\/\w+/){|adress| arr = adress.split(/\//)newaddr = arr[0]+"/"+arr[1]p newaddr+"/#{@@substr}"} endendA.new.generate_addr #輸出結(jié)果: D:/programe file/WA5C3n② str.replace(other_str) 把 str 中的內(nèi)容替換為 other_str 中的相對(duì)應(yīng)的值。代碼如下:str1 = "No good building without a good foundation."str2 = "No great loss without some small gain."p str.replace(str2)輸出結(jié)果:"No great loss without some small gain." ④ str.gsub(pattern, replacement) str.gsub(pattern) { |match| block }返回 str 的副本,pattern 的所有出現(xiàn)都替換為 replacement 或 block 的值。pattern 通常是一個(gè)正則表達(dá)式 Regexp;如果是一個(gè)字符串 String,則沒(méi)有正則表達(dá)式元字符被解釋(即,/\d/ 將匹配一個(gè)數(shù)字,但 '\d' 將匹配一個(gè)反斜杠后跟一個(gè) 'd')。str.gsub!(pattern, replacement) str.gsub!(pattern) { |match| block }執(zhí)行 String#gsub 的替換,返回 str,如果沒(méi)有替換被執(zhí)行則返回 nil。代碼如下:str=<<RP小芳,女,23小草,女,18小熙,女,17RPputs str.gsub(/女/){|match| '男'}輸出結(jié)果:小芳,男,23;小草,男,18;小熙,男,17. ⑥ str[fixnum] = fixnum str[fixnum] = new_str str[fixnum, fixnum] = new_str str[range] = aString str[regexp] =new_str str[regexp, fixnum] =new_str str[other_str] = new_str ]替換整個(gè)字符串或部分字符串。與 slice! 同義。代碼如下:def replace_str(str,m,n)repl_str = "*"*((m..n).size) str[m..n] = repl_strreturn strendp replace_str("18729767432",3,6)輸出結(jié)果:187****7432 ⑦返回 str 的副本,把 from_str 中的字符替換為 to_str 中相對(duì)應(yīng)的字符,返回替換后的整個(gè)字符串。str.tr(from_str, to_str)str.tr!(from_str, to_str)str.tr_s(from_str, to_str)str.tr_s!(from_str, to_str) 【Notes】如果 from_str 以 ^ 開(kāi)頭,則表示除了所列出的字符以外的所有字符。代碼如下:def my_tr(city,area)str = "江蘇省南京市雨花臺(tái)區(qū)"p str.tr('南京市',"#{city}")p str.tr_s('南京市','#{city}')p str.tr_s('雨花臺(tái)區(qū)','#{area}')p str.tr('^江蘇省','*')endmy_tr("蘇州市","玄武區(qū)")輸出結(jié)果:"江蘇省蘇州市雨花臺(tái)區(qū)""江蘇省蘇州市雨花臺(tái)區(qū)""江蘇省南京市玄武區(qū)""江蘇省*******"

(4.5)字符串左右對(duì)齊
①字符串左對(duì)齊
str.ljust(integer, padstr=’ ‘) 如果 integer 大于 str 的長(zhǎng)度,則返回長(zhǎng)度為 integer 的新字符串,新字符串以 str 左對(duì)齊,并以 padstr 作為填充。否則,返回 str。
②字符串右對(duì)齊
str.rjust(integer, padstr=’ ') 如果 integer 大于 str 的長(zhǎng)度,則返回長(zhǎng)度為 integer 的新字符串,新字符串以 str 右對(duì)齊,并以 padstr 作為填充。否則,返回 str。

代碼如下:def align_str(str,m,padstr)puts str.ljust(m,padstr) puts str.rjust(m,padstr) endalign_str("tripod",20,'_')輸出結(jié)果:tripod____________________________tripod

(4.6)去除字符串前后空格
str.lstrip 返回 str 的副本,移除了前導(dǎo)的空格。
str.lstrip! 從 str 中移除前導(dǎo)的空格,如果沒(méi)有變化則返回 nil。
str.rstrip 返回 str 的副本,移除了尾隨的空格。
str.rstrip! 從 str 中移除尾隨的空格,如果沒(méi)有變化則返回 nil。
str.strip 返回 str 的副本,移除了前導(dǎo)的空格和尾隨的空格。
str.strip! 從 str 中移除前導(dǎo)的空格和尾隨的空格,如果沒(méi)有變化則返回 nil。

代碼如下:def my_trips1 = " angel"s2 = "angel "s3 = " domestic "puts s1.length #10puts s2.length #10puts s3.length #20s4 = s1.lstripputs s4.size #5s5 = s2.rstripputs s5.length #5s6 = s3.stripputs s6.length #8puts s3,s4,s6endmy_trip輸出結(jié)果:101020558domesticangeldomestic

(4.7)字符串反轉(zhuǎn)
str.reverse 返回一個(gè)新字符串,新字符串是 str 的倒序。
str.reverse! 逆轉(zhuǎn) str,str 會(huì)發(fā)生變化并返回

代碼如下:str = <<ST推窗把酒逗云閑笑月扶風(fēng)惹弱蘭追韻艷花羞墨醉隨情舞夢(mèng)悟心禪STputs str.reverse輸出結(jié)果:禪心悟夢(mèng)舞情隨醉墨羞花艷韻追蘭弱惹風(fēng)扶月笑閑云逗酒把窗推

(4.8)字符串居中
str.center(width , “fillchar”) 返回一個(gè)長(zhǎng)度為width,兩邊用fillchar(單字符)填充的字符串,即字符串str居中,兩邊用fillchar填充。若字符串的長(zhǎng)度大于width,則直接返回字符串str

代碼如下:def center_str(str,width,padstr)return str.center(width,padstr)endp center_str("為中華崛起而讀書(shū)",30,"*") 輸出結(jié)果:***********為中華崛起而讀書(shū)***********

(4.9)str.succ [or] str.next 返回 str 的繼承。
str.succ! [or] str.next! 相當(dāng)于 String#succ,但是 str 會(huì)發(fā)生變化并返回。

代碼如下:def next_succ(str1,str2)for i in 0...25str1 << str1[str1.length-1].nextif i<9str2 << str2[str2.length-1].succendendp str1,str2endnext_succ("a","1")輸出結(jié)果:"abcdefghijklmnopqrstuvwxyz""12345678910

5、查找字符串

(5.1)從左向右查找第一個(gè)
str.index(substring [, offset])
str.index(fixnum [, offset])
str.index(regexp [, offset])
返回給定子字符串、字符(fixnum)或模式(regexp)在 str 中第一次出現(xiàn)的索引。如果未找到則返回 nil。如果提供了第二個(gè)參數(shù),則指定在字符串中開(kāi)始搜索的位置。

代碼如下:str = "The time is ripe for change."p str.index('i') #第二個(gè)參數(shù)省略,默認(rèn)從0開(kāi)始查找p str.index('i',0) p str.index('i',-1) #第二個(gè)參數(shù)是-1,代表從末尾開(kāi)始向后查找 p str.index('i',-18) #第二個(gè)參數(shù)是負(fù)數(shù)m(如:-18),代表從末尾偏移向左m【包括第m個(gè)字符】(如:18)個(gè)字符,然后從該字符起向后查找p str.index('i',6) #第二個(gè)參數(shù)是正數(shù)m,表示從字符串索引m處開(kāi)始向后查找p str.index(/i/)p str.index(/i/,-18) #第一個(gè)參數(shù)可以是正則表達(dá)式輸出結(jié)果:55nil139513

(5.2)逆向查找(從右向左查第一個(gè))
str.rindex(substring [, fixnum])
str.rindex(fixnum [, fixnum])
str.rindex(regexp [, fixnum])
返回給定子字符串、字符(fixnum)或模式(regexp)在 str 中最后一次出現(xiàn)的索引。如果未找到則返回 nil。如果提供了第二個(gè)參數(shù),則指定在字符串中結(jié)束搜索的位置。超出該點(diǎn)的字符將不被考慮。

代碼如下:s = "ABcdABefg1cd23ABhABk" #字符串總長(zhǎng)度size = 20puts s.rindex("AB",-1) #-1代表從字符串末尾開(kāi)始從右向左查找 puts s.rindex("AB",-4) #-m(如-4)代表從字符串末尾偏移m個(gè)字符(包括第m個(gè)字符)開(kāi)始向左查詢puts s.rindex("AB",0) #0puts s.rindex("AB",7) #4輸出結(jié)果:17 1404

(5.3)不區(qū)分大小寫(xiě)查找
【idea】利用downcase或者upcase全部轉(zhuǎn)換成小寫(xiě)或者大寫(xiě),然后再查找。

代碼如下:str = "This work has galvanised efforts TO understand a critical period in economic history."p str.upcase.index('I',20)p str.downcase.rindex('t',-10) 輸出結(jié)果:2052

(5.4)正則匹配查找
str =~ obj 根據(jù)正則表達(dá)式模式 obj 匹配 str。返回匹配開(kāi)始的位置,否則返回 nil。

代碼如下:def myMatch(phonenum)phone_match = (phonenum=~ /^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}/)p phone_matchif phone_matchputs "輸入的手機(jī)號(hào)碼有效,請(qǐng)注冊(cè)!"else puts "請(qǐng)輸入正確的手機(jī)號(hào)碼!"endendmyMatch('18729767432')myMatch('11229767432') 輸出結(jié)果:0輸入的手機(jī)號(hào)碼有效,請(qǐng)注冊(cè)!nil請(qǐng)輸入正確的手機(jī)號(hào)碼!

(5.5)統(tǒng)計(jì)字符串里某個(gè)字符出現(xiàn)的次數(shù)
①str.count(str,…) 方法用于統(tǒng)計(jì)字符串里某個(gè)字符出現(xiàn)的次數(shù)。如果有多個(gè)字符,則給這些字符集合的交集字符計(jì)數(shù)。
②str.count(sub1,sub2…)
返回值
該方法返回子字符串在字符串中出現(xiàn)的次數(shù)。

代碼如下:def my_count(*str)str1 = "hello,rubby!I love you!"str2 = "ear,here you are!" if str.length <= 1count1 = str1.count(str[0])puts "字符串#{str}在str1中出現(xiàn)了#{count1}次"elsecount2 = str2.count(str[0],str[1])new_str = str.joinsub_str =""for i in 0...new_str.lengthif (new_str.count(new_str[i])>1) sub_str<<new_str[i]endendputs "字符串#{str[0]}、#{str[1]}的交集#{sub_str[0,2]}在str2中出現(xiàn)了#{count2}次"end end輸出結(jié)果:my_count('o')my_count('der','aer') 字符串["o"]在str1中出現(xiàn)了3次字符串der、aer的交集er在str2中出現(xiàn)了7次

(5.6)判斷字符串是否包含某個(gè)子串
str.include? other_str
如果 str 包含給定的字符串或字符,則返回 true。

代碼如下:def my_include(substr)s = "heart attacks, strokes, cancers, eating disorders, drug abuse, sleep deprivation, depression, alcoholism and anxiety"if s.include?substrputs "字符串s中包含sub_str"elseputs "字符串s中不包含sub_str"endendmy_include('depression')my_include('ortunate')輸出結(jié)果:字符串s中包含sub_str字符串s中不包含sub_str

(5.7)判斷字符符串是否為空
str.empty? 如果 str 為空(即長(zhǎng)度為 0),則返回 true。

代碼如下:def judge_empty(str)if str.empty?p "str:#{str}為空"elsep "str:#{str}不為空"endendjudge_empty("")judge_empty("bull")輸出結(jié)果:"str:為空""str:bull不為空"

6.字符串比較

①== 檢查兩個(gè)操作數(shù)的值是否相等,如果相等則條件為真

代碼如下:def check(other_str)@@str = "ru"if @@str == other_strputs "str等于other_str"elseputs "str不等于other_str"endendcheck('ru')check('ruby') 輸出結(jié)果:str等于other_strstr不等于other_str

②<=> 聯(lián)合比較運(yùn)算符。如果第一個(gè)操作數(shù)等于第二個(gè)操作數(shù)則返回 0,如果第一個(gè)操作數(shù)大于第二個(gè)操作數(shù)則返回1,如果第一個(gè)操作數(shù)小于第二個(gè)操作數(shù)則返回 -1。

代碼如下:class Adef check1(s1,s2)@x1=0@x2=1@x3=-1if @x1==(s1<=>s2)puts "s1等于s2"elsif @x2==(s1<=>s2)puts "s1大于s2"elseputs "s1小于s2"endend enda= A.newa.check1("bd","bc")a.check1("bd","bf")輸出結(jié)果:s1大于s2s1小于s2

③=== 用于測(cè)試 case 語(yǔ)句的 when 子句內(nèi)的相等。如:(1…10) === 5 返回 true。

代碼如下:class Bdef check2(s1)@m = 'a'..'z'if @m===s1puts "變量s1是字母"elseputs "變量s1不是字母"endendendobj = B.newobj.check2("h")obj.check2 "3" 輸出結(jié)果:變量s1是字母變量s1不是字母

④.eql? 如果接收器和參數(shù)具有相同的類型和相等的值,則返回 true。如:1 == 1.0 返回 true,但是 1.eql?(1.0) 返回 false。
④.equal? 如果接收器和參數(shù)具有相同的對(duì)象 id,則返回 true。如:如果 aObj 是 bObj 的副本,那么 aObj == bObj 返回 true,a.equal?bObj 返回 false,但是 a.equal?aObj 返回 true。

代碼如下:class C@@a = 1.0@@b = @@adef check3(s1,s2)a = (s1==(@@a))b = (s2.eql?(@@a))c = (@@b.equal?@@a)return a,b,cendendc = C.newputs c.check3(1,2.98) 輸出結(jié)果:truefalsetrue

⑥str1.casecmp(str2) 不區(qū)分大小寫(xiě)的字符串比較。如果str1等于str2,則返回0;如果str1大于str2,則返回1,如果str1小于str2則返回-1(大小關(guān)系:a<b<c<d…)

代碼如下:def check4(s2)s1 = "greate"puts s1.casecmp(s2)x = s1.casecmp(s2)if x = 0puts "s1和s2相同"elseputs "s1和s2不相同"endendcheck4('GREATE')check4('great') 輸出結(jié)果:0s1和s2相同1s1和s2相同

7、字符串迭代

①用for迭代字符串 ②str.each_char{ |substr| block } 迭代每個(gè)字符。 ③str.each_byte { |fixnum| block } 迭代每個(gè)字符,以字節(jié)的十進(jìn)制ASCll碼表示法返回每個(gè)字節(jié)。 ④str.each_line(separator=\n) { |substr| block } 用換行符分割子字符串進(jìn)行迭代def my_iterationstr = "abc\ndefghijk"for i in 0..(str.length)puts str[i]endstr.each_char{|s| p s}str.each_byte{|s| puts s}str.each_line{|s| p s}str.each_line("e"){|s| p s}str.each_line("e") do |s| #這是另一種寫(xiě)法,用do/end替換了{(lán) }對(duì),以上幾種方法都可以寫(xiě)成這種形式p send end my_iteration ⑤str.scan(pattern) str.scan(pattern) { |match, ...| block }兩種形式匹配 pattern(可以是一個(gè)正則表達(dá)式 Regexp 或一個(gè)字符串 String)遍歷 str。針對(duì)每個(gè)匹配,會(huì)生成一個(gè)結(jié)果,結(jié)果會(huì)添加到結(jié)果數(shù)組中或傳遞給 block。代碼如下:s = 'abc123bacd234gsacd67231n437ac347rg'arr = []s.scan(/[a-z]+/){|match| arr<<match}p arr #把匹配到的字符放到數(shù)組中輸出s.scan(/\d{1,}/){|i| p i}輸出結(jié)果:["abc", "bacd", "gsacd", "n", "ac", "rg"]"123""234""67231""437""347⑥str.upto(other_str) { |s| block } 遍歷連續(xù)值,以 str 開(kāi)始,以 other_str 結(jié)束(包含),輪流傳遞每個(gè)值給 block。String#succ 方法用于生成每個(gè)值。 代碼如下:class Updef my_upto1(*str)0.upto(str.length-1){|i| p str[i]}enddef my_upto2(arr)0.upto(arr.length-1){|i| p arr[i]}endendu = Up.newu.my_upto1('北京','上海','深圳','廣州','杭州')u.my_upto2(['成都','南京','重慶','西安','青島'])輸出結(jié)果:"北京""上海""深圳""廣州""杭州""成都""南京""重慶""西安""青島

8、格式化字符串

①Ruby的字符串格式話沿用了C的格式,在C中可用于sprintf或printf的格式話字符在Ruby中同樣適用 ②String類有個(gè)%方法,可以方面的做格式化的工作,它接受任何類型的單個(gè)值或一個(gè)數(shù)組代碼如下:def myFormat1(str)name = "John"age = 34puts "¥%0.2f"%strputs sprintf("$%0.2f",str)puts "%0.2f%%"%strputs "%x"%str #十六進(jìn)制puts "%o"%strputs "%e"%strputs "%-20s %5d"%[name,age] #變量name的字符串長(zhǎng)度為20,內(nèi)容左靠齊puts "%+20s %5d"%[name,age] #變量name的字符串長(zhǎng)度為20,內(nèi)容右靠齊end myFormat1(64365.4367)輸出結(jié)果:¥64365.44$64365.4464365.44%fb6d1755556.436544e+04John 34John 34

9、壓縮重復(fù)字符

str.squeeze([other_str]*) 代碼如下:s ="aabbbbccc dddeeeffhhkkkkiiillll"p s.squeeze()p s.squeeze("a")p s.squeeze('a-l')p s.squeeze('abcd','abcda')p s.squeeze(" ")輸出結(jié)果:"abc defhkil""abbbbccc dddeeeffhhkkkkiiillll""abc defhkil""abc deeeffhhkkkkiiillll""aabbbbccc dddeeeffhhkkkkiiillll"

10、類型與進(jìn)制轉(zhuǎn)換:

(10.1)整數(shù)轉(zhuǎn)為一位小數(shù)的浮點(diǎn)數(shù):str.to_f

代碼如下:s = 13p s.to_f輸出結(jié)果:13.0

(10.2)十進(jìn)制浮點(diǎn)數(shù)轉(zhuǎn)化為十進(jìn)制整數(shù): str.to_i

代碼如下:s = 13.56p s.to_i輸出結(jié)果:13

(10.3)十六進(jìn)制的字符串轉(zhuǎn)換為十進(jìn)制: str.hex

代碼如下:s1 = 'E's2 = '20'p s1.hex,s2.hex輸出結(jié)果:1432

(10.4)八進(jìn)制到十進(jìn)制轉(zhuǎn)換:str.oct

代碼如下:s = '16'p s.oct輸出結(jié)果:14

(10.5)其他進(jìn)制的整型轉(zhuǎn)化為十進(jìn)制的字符串:str.to_s [or] str.to_str

代碼如下:s1 = 16s2 = 0x12s3 = 014s4 = 0b1101p s1.to_sp s2.to_s,s3.to_s,s4.to_s輸出結(jié)果:"16""18""12""13"

11、其他的一些不常用的方法

(11.1) str.crypt(other_str) 對(duì) str 應(yīng)用單向加密哈希。參數(shù)是兩個(gè)字符長(zhǎng)的字符串,每個(gè)字符的范圍為 a.z、 A.Z、 0.9、 . 或 /。
代碼如下:

def myMethods = "hello"s0 = "world"puts s.crypt("?~") #?~dR0/E99ehpUputs s.crypt("/*") #/*zNif3eFhef6puts s.crypt("?&") #?&dR0/E99ehpUputs s.crypt("/&") #/&zNif3eFhef6puts s0.crypt("?~") #?~Nnq2zx4MsRQputs s0.crypt("/*") #/*OqD/LklhceUputs s0.crypt("?&") #?&Nnq2zx4MsRQputs s0.crypt("/&") #/&OqD/LklhceUendmyMethod 輸出結(jié)果:?~dR0/E99ehpU/*zNif3eFhef6?&dR0/E99ehpU/&zNif3eFhef6?~Nnq2zx4MsRQ/*OqD/LklhceU?&Nnq2zx4MsRQ/&OqD/LklhceU

(11.2) str.dump 返回 str 的可打印版本,所有帶有轉(zhuǎn)義的特殊字符失去轉(zhuǎn)義字符的作用,原樣輸出。
str.inspect 返回 str 的可打印版本,所有帶有轉(zhuǎn)義的特殊字符失去轉(zhuǎn)義字符的作用,原樣輸出。
代碼如下:

def myMethods = "hello\n\r\t"puts s.dump #"hello\n\r\t"a = "eat\neating\t"puts a.inspect #"eat\neating\t"endmyMethod輸出結(jié)果:"hello\n\r\t""eat\neating\t"

(11.3) str.hash 返回一個(gè)基于字符串長(zhǎng)度和內(nèi)容的哈希值。
代碼如下:
s = “studio”
puts s.hash
輸出結(jié)果:
383233735
(11.4) str.sum(n=16)
返回 str 中字符的 n-bit 校驗(yàn)和,其中 n 是可選的 Fixnum 參數(shù),默認(rèn)為 16。結(jié)果是簡(jiǎn)單地把 str 中每個(gè)字符的二進(jìn)制值的總和,以 2n - 1 為模。
代碼如下:

str = "abcd"p str.sum()p str.sum(-1)p str.sum(0)p str.sum(1)p str.sum(2)p str.sum(3)p str.sum(4)p str.sum(5)p str.sum(6)p str.sum(8)p str.sum(9)p str.sum(10)p str.sum(13)輸出結(jié)果:294294294026663838294294294

(11.5)
①str.intern
str.to_sym
返回與 str 相對(duì)應(yīng)的符號(hào),如果之前不存在,則創(chuàng)建符號(hào)。

②str.match(pattern)如果 pattern 不是正則表達(dá)式,則把 pattern 轉(zhuǎn)換為正則表達(dá)式 Regexp,然后在 str 上調(diào)用它的匹配方法。代碼如下:str = "111aaacdh12"p str.match(/\d{2}/)p str.match(/a{3}/)輸出結(jié)果:<MatchData "11"><MatchData "aaa">

12、tr.unpack(format)

總結(jié)

以上是生活随笔為你收集整理的Ruby之旅之字符串的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。