標籤:字串 朋友 知識
本文主要講ruby中的字串的建立以及使用方法,希望能協助到正在學習ruby(http://www.maiziedu.com/course/ruby-px/)字串的朋友。
字串的建立:字串也是一種對象,和其他一般的對象一樣,能夠使用new的方法來建立。
eg:
str = String.new
str << 72 << 101 << 108 << 108 << 111
p str #=> " Hello "
字串字面量:將想建立的字串寫在一對(")或者(‘)內
eg:
"Hello"
"中文"
‘single quoted‘
‘含有換行‘
轉義符:用雙引號括起來的字串同時也可以使用轉義符,轉義符用反斜線“\”加上特定的記號來表示。
eg: "\n" "\0"
公式的展開:在雙引號表示的字串字面量中可以進行公式的展開,但是在單引號表示的字串中則不可以。所謂公式的展開是指在字串中括在#{ ... }中的部分會被作為Ruby的公式來解釋,它的值將被展示在字串中。
eg:
a = 2
"a的值是#{ a }"
"a的5次方是#{ a ** 5 }"
反引號字串:字串如果用反引號(`)引用,就會成為一種特殊的字串字面量。反引號中的內容將會作為shell命令被執行,命令的輸出內容會被轉換成字串。
eg:
p `date`
p `pwd`
百分比符號記法:百分比符號記法中不使用反斜線來對引號字元進行轉義,所以在表示包含很多引號的字串時,減少了轉義符的使用。
eg:
% q [其中含有"的字串] #=>"
%Q[其中含有‘的字串] #=>‘
Regex:Regex是字串進行某種模式比對的迷你程式語言。尋找或替換字串中具有特定模式的部分時,可以很簡單的對模式加以表述。
Regex字面量:Regex(Regexp)對象由Regex字面量來建立。Regex字面量就是像/Regexp/這樣用斜線括起來的運算式。另外,除了使用斜線以外,還可以使用百分比符號記法,像%r!regexp!這樣來記述。而且Regex字面量中轉義符公式展開也是可以使用的。參數!表示該Regex不區分字母大小寫。
對字串進行操作:
eg:
story = <<EOS
Solomon Grundy,
Born on Monday,
Christened on Tuseday,
Married on Wednesday,
Took ill on Thursday,
Worse on Friday,
Died on Saturday,
Buried on Sunday,
This is the end
Of Solomon Grundy.
EOS
#根據位置對字元進行操作
p story [ 0 ], story [ 1 ], story [ 2 ] #=>"S", "o", "l"
p story [ 187 ] #=>nil
#負的位置
p story [ -1 ], story [ -2 ], story [ -3 ], story [ -4 ] #=>"\n", ".", "y", "d"
p story [ 8, 6 ] #=>"Grundy" 用位置和長度進行操作
p story [ 8...14 ] #=>"Grundy" 用範圍進行操作
p story [ "Monday" ] #=>"Monday" 用子字串進行操作
p story [ /\w+sday/ ] #=>"Wednesday" 用Regex進行操作
更新:Ruby中字串對象是可變的,所以字串的內容也是可變的。
eg:
story [ "Solomon Grundy" ] = "Hippopotamus"
print story
#=>Hippopotamus
#Born on Monday,
#Christened on Tuseday,
#Married on Wednesday,
#Took ill on Thursday,
#Worse on Friday,
#Died on Saturday,
#Buried on Sunday,
#This is the end
#Of Solomon Grundy.
字串操作:
eg1:串連
"str" + "ing" #=>"string"
str = "str"; str << "ing"
p str #=>"string" 破壞性的串連運算子<<
eg2:重複
"Look! " * 3 #=> "Look! Look! Look! "
eg3:分割:將一個字串分解成多個字串則可以使用split方法,在其參數中代入Regex,
"a, bb, ccc, dddd".split ( /,/ ) #=> ["a", " bb", " ccc", " dddd"]
"string".split( // ) #=> ["s", "t", "r", "i", "n", "g"]
eg4:其他
"string".reverse #=> "gnirts" 將字串倒轉的方法
"\n \rstring ".strip #=>"string" 刪除字串開頭和結尾空白的方法
"string" . length #=>6 計算字串長度
eg5:迭代:在字串上進行反覆操作的方法
"str" . each_byte do |byte|
p byte #=>115, 116, 114
end
story . each_line do |line|
print line
end
"String" . each_char do |char|
p char #=>"S", "t", "r", "i", "n", "g"
end
eg6:格式化
printf ( "%04d", 3 ) #=>"0003"4位元,前面以0補齊
printf( "%08.4f", Math::PI * 10 ) #=>"031.4159"
printf( "hex = %X, oct = %o", 10,10 ) #=>"hex = A, oct = 12"
String#%也具有相同的功能,而且用起來更簡潔。
p "%04d" % 3
p "%08.4f" % (Math::PI * 10)
p "hex = %X, oct = %o" % [10, 10]
eg7:Encoding(編碼)
"Hello" . encoding #=><Encoding:UTF-8>
Encoding . name_list #列出現在可以使用的編碼方式
Encoding . find("CP1258") #得到Encoding編碼對象
eg8:Magic Comment(魔法注釋)
# -*- coding:utf-8 -*- 或 # vim:fileencoding = UTF-8
有了這樣的注釋,Ruby會將原始碼以UTF-8的編碼來看待,使用時將這樣的注釋添加到原始碼的開頭即可。
eg8:編碼的更換:使用String#encode方法可以更換字串的編碼
# -*- coding:utf-8 -*-
utf = "中國"
p utf . encoding #=>#<Encoding:UTF-8>
sjis = utf . encode("Shift_JIS")
p sjis . encoding #=>#<Encoding:Shift_JIS>
字串的比較:字串只有在位元組表相同並且編碼方式也相同的情況下才相等。
ruby入門知識:string的建立及使用方法詳解