Preface
在 Ruby 中要表示字串,看似可以使用雙引號或單引號來包括字元序列,字串是 String 類別的實例。例如:
注意'Just"in'時,實際上相當於"Just\"in",\" 表示忽略(Escape)字元,因為"被用來作為括住字串的表示法,如果要在字串中表示",就必須寫為\",直譯器看到\會忽略下一個字元,不作為語法的一部份。另外還有一些常用的忽略字元表示:
實際上Ruby中的字串,應該都是使用雙引號括住,單引號括住的字串,實際上是讓你不用撰寫\\、\"忽略字元,就可以代表\、"的簡便方式。例如:
如上所示,如果你想顯示Just\in的結果,使用'Just\in',實際會被轉換為"Just\\in",如果你想顯示Just"in,使用'Just"in',實際會被轉換為"Just\"in",也因此,在單引號中,除了\\與\'之外,撰寫其它忽略字元都會被當作原始字串(Raw string)。
More About String:
雙引號字串中若包括 #{},則 #{} 中的內容會被當作程式解釋。例如:
被單引號括住的字串,不會對 #{} 中的內容解譯。
如果想建立的字串中,同時要含有雙引號與單引號,可以使用 %Q 或 %q 比較方便,%Q 相當於建立雙引號字串,%q 相當於建立單引號字串。%Q 與 %q 搭配 {、} 或 |、| 都可以。例如:
撰寫字串時,可以在雙或單引號中直接Enter換行,字串會自動加上\n,如果包括縮排用的空白,空白也會是最後字串的一部份。例如:
如果你想知道字串的字元長度,則可以使用 length 方法(自 Ruby 1.9.2 開始)。例如:
如果想要逐一取得字元,可以使用 each_char 方法:
或者是使用 include? 方法測試是否包括某些字串:
可以使用 + 操作來串接字串,使用 * 可以重複字串:
在強弱型別的光譜中,Ruby 比較偏強型別,型態較不能自行轉換,例如 Ruby 中,不能混合字串與數字進行+運算,你得自己使用 to_s 方法,將數字轉為字串,才可以進行字串串接:
+ 實際會產生新的字串,不過在Ruby中,字串是可變動的(Immutable),例如可使用 << 在原字串後附加字串:
如果你想知道某個字元的編碼,則可以使用 ord 方法,使用 chr 方法則可以將指定編碼轉換為字元:
字串是由字元序列所組成,如果你想要取得字串中某個字元,則可以使用 [] 指定索引,索引從 0 開始。例如:
Ruby中的索引,不僅可指定正值,還可以指定負值,實際上了解索引意義的開發人員,都知道索引其實就是相對第一個元素的偏移值,在Ruby中,正值索引就是指正偏移值,負值索引就是負偏移值,也就是 -1 索引就是倒數第一個元素,-2 索引就是倒數第二個元素.
[] 操作還可以進行切片(Slice)運算。例如:
[n..m] 是指定起始索引與結束索引,且包括結束索引,以取得子字串,[n...m] 是指定起始索引與結束索引,但不包括結束索引(實際上n..m或n...m建立了 Range 實例,之後會再說明),[n,length] 是指定起始索引與長度以取得子字串,由於可指定負值,因此 name[0, 3] 就相當於指定 name[0..2].
先前談過,Ruby 中的字串是可以變動的,你也可以使用 [] 指定索引變動字串內容:
[n..m]、[n...m] 或 [n, length] 右邊接上=,表示作取代的動作,如果指定了 [n..0]、[n...0]或[n, 0],則是技巧性地作了安插的動作。
如果想要取代字串,也可以使用 [] 時指定被取代字串。例如:
如果想要反轉字串,可以使用 reverse 方法,這會傳回新字串,內容為原字串反轉後的結果,如果使用 reverse! 方法,則會在原字串上反轉:
在 Ruby 的慣例中,如果同時提供有 name 與 name! 兩種方法,有 ! 結尾的方法代表著要注意它與無 ! 方法有所不同。例如,字串上沒 ! 的方法表示以新字串傳回結果,有 ! 的方法表示會修改原字串,像是轉大寫就有 upcase 與 upcase! 方法,轉小寫會有 downcase 與 downcase! 方法,裁剪字串前後空白的 chomp 與 chomp! 等方法。
Ruby 慣例中,有提供!的方法,就會有提供對應的無 ! 方法。例如,有 abc! 方法,慣例上就會有個 abc 方法,不會只單獨定義一個 cde! 方法,而沒有對應的 cde 方法。有經驗的Ruby程式開發人員,看到 xyz!,就會去思考它與 xyz 方法有什麼不同。
Supplement
* Ruby 手冊 - 字串
沒有留言:
張貼留言