Ruby 教學 - 字串 (String)
語法
字串有四種使用方式:
- 單引號
- 雙引號
- Heredoc
- 百分比符號 (%)
以下逐一進行介紹
單引號
以兩個單引號包夾一段文字,表示字串內容,使用單引號的字串有一些特徵如下 (與雙引號比較):
- 逸出字元 (Escape characters) 只有兩種。
- 逸出字元
\\
可省略寫作\
,但不可為最後一個字元 (不建議省略)。 - 不會對字串中的程式進行解析。
所謂逸出字元是為了某些特別的用途或能以此輸入打不出來的字,而定義的一種使用方式,在此的逸出字元以反斜線 (backslash) 開頭。例如,我們使用單引號做包夾,但字串中如果出現單引號,將會誤判為字串結束單引號,所以使用 \'
來表示字串中的單引號。使用單引號的字串可用的逸出字元如下:
符號 | 說明 |
---|---|
' | 單引號字元。 |
\ | 反斜線字元。 |
一些使用範例如下:
1 | puts '基本用法'; |
雙引號
以兩個雙引號包夾一段文字,表示字串內容,最主要的重點是,變數會在雙引號中被解析。雙引號的逸出字元如下:
符號 | 說明 |
---|---|
\n | 換行字元 (LF or 0x0A)。 |
\s | 空白字元 (Space)。 |
\r | 歸位字元 (CR or 0x0D)。 |
\t | 水平Tab字元 (HT or 0x09)。 |
\v | 垂直tab字元 (VT or 0x0B)。 |
\f | 跳頁字元 (CR or 0x0C)。 |
\b | backspace 字元 (0x08)。 |
\a | bell / alert 字元 (0x07)。 |
\e | escape 字元 (0x1b)。 |
[0-7]{1,3} | 以八進位法表示字元。 |
\x[0-9A-Fa-f]{1,2} | 以十六進位法表示字元。 |
\u[0-9A-Fa-f]{4} | 以十六進位法表示 Unicode 字元。 |
\x | 其他非逸出字元會顯示 x 本身。 |
\cx | control-x |
\C-x | control-x |
\M-x | meta-x |
\M-\C-x | meta-control-x |
一些使用範例如下:
1 | puts "基本用法"; |
Heredoc
Heredoc 使用 <<
符號開始,後面接著一個自訂的標籤,最後以自訂的標籤作結束。
開頭的標簽有三種寫法,影響內容的解析:
- 不含引號,效果同雙引號字串。
- 單引號字串,內容解析處理同單引號字串,類似PHP的nowdoc。
- 雙引號字串,內容解析處理同雙引號字串。
內容的解析處理包含逸出字元和程式解析:
1 | text = "hello" |
結果輸出
1 | <a href="http://tw.yahoo.com">Yahoo's web</a><br/> |
如果結尾標簽希望能夠縮排,可使用 <<-
的寫法
1 | puts <<-EOT |
另外 <<XXX
本身其實可以視為一個變數進行處理:
1 | puts <<EOT * 3 |
結果輸出
1 | This is a test |
百分比符號
另一用法是利用百分比 (%
) 開頭,加上任意的符號 (非字母數字) 包夾字串內容,共有三種用法:
%{xxx}
,解析內容%q{xxx}
,不解析內容%Q{xxx}
,同1,解析內容
規則和單引號雙引號類似,如下範例:
1 | text = 123 |
程式解析
字串中可使用 #{expr}
的形式插入程式碼,稱為 Interpolation,通常用來填入變數,不過也可以執行程式:
1 | value = 2 * 5 |
字串的操作
字元的存取修改
字串可簡單視為字元的陣列,可以用陣列的索引方式取得或修改某個字元。用法範例如下:
1 | str = "I lose" |
其中特別要注意的地方是,Ruby 的物件導向將字串也視為一個物件,當他指派給新的變數的時候只會得到他的記憶體參考位址,所以修改字串內容將會影響到所有參考的變數!
字串的連接
字串可以簡單利用加號 (+
) 來連接,有別於其他程式語言,數字等型別必須先轉成字串來能連接:
1 | hello = "Hello" |
轉型
字串可以使用以下轉型函式:
- to_i: 轉整數
- to_f: 轉浮點數
- to_sym: 轉符號
- …
如下範例:
1 | p "169.99cm".to_f # 169.99 |
從上可以看到,轉數字部分會取出前面符合的部分,
延伸閱讀
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 小殘的程式光廊!
Comment