當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Ruby String類用法及代碼示例

本文簡要介紹ruby語言中 String類 的用法。

String 對象具有任意字節序列,通常表示文本或二進製數據。可以使用 String::new 或作為文字創建 String 對象。

String 對象與 Symbol 對象的不同之處在於, Symbol 對象旨在用作標識符,而不是文本或數據。

您可以使用以下命令顯式創建 String 對象:

您可以使用以下方法將某些對象轉換為字符串:

一些 String 方法會修改 self 。通常,名稱以 ! 結尾的方法會修改 self 並返回 self ;通常一個類似命名的方法(沒有 ! )返回一個新字符串。

一般來說,如果同時存在 bang 和 non-bang 版本的方法,則 bang!變異和非爆炸!才不是。但是,沒有 bang 的方法也可以發生變異,例如 String#replace

替代方法

這些方法執行替換:

這些方法中的每一個都需要:

  • 第一個參數 pattern(字符串或正則表達式)指定要替換的子字符串。

  • 這些中的任何一個:

    • 第二個參數 replacement(字符串或散列)確定替換字符串。

    • 將確定替換字符串的塊。

本節中的示例主要使用方法 String#sub String#gsub ;說明的原則適用於所有四種替代方法。

參數pattern

參數 pattern 通常是一個正則表達式:

s = 'hello'
s.sub(/[aeiou]/, '*')  # => "h*llo"
s.gsub(/[aeiou]/, '*') # => "h*ll*"
s.gsub(/[aeiou]/, '')  # => "hll"
s.sub(/ell/, 'al')     # => "halo"
s.gsub(/xyzzy/, '*')   # => "hello"
'THX1138'.gsub(/\d+/, '00') # => "THX00"

pattern 是字符串時,它的所有字符都被視為普通字符(而不是正則表達式特殊字符):

'THX1138'.gsub('\d+', '00') # => "THX1138"

字符串replacement

如果replacement 是字符串,則該字符串將確定要替換匹配文本的替換字符串。

上麵的每個示例都使用一個簡單的字符串作為替換字符串。

字符串replacement 可能包含模式捕獲的back-references:

  • \n(n 一個非負整數)指的是 $n

  • \k<name> 指的是命名捕獲 name

有關詳細信息,請參閱regexp.rdoc

請注意,在字符串 replacement 中,諸如 $& 之類的字符組合被視為普通文本,而不是特殊匹配變量。但是,您可以使用這些組合來引用一些特殊的匹配變量:

  • \&\0 對應於 $& ,其中包含完整的匹配文本。

  • \' 對應於 $' ,其中包含匹配後的字符串。

  • \` 對應於 $` ,其中包含匹配前的字符串。

  • + 對應於 $+ ,其中包含最後一個捕獲組。

有關詳細信息,請參閱regexp.rdoc

請注意,\\ 被解釋為轉義,即單個反斜杠。

另請注意,字符串文字使用反斜杠。有關字符串文字的詳細信息,請參閱String Literals

back-reference 通常以附加的反斜杠開頭。例如,如果您想在 replacement 中使用雙引號字符串文字編寫 back-reference \&,則需要編寫 "..\\&.."

如果要在 replacement 中寫入非反向引用字符串 \& ,則需要先轉義反斜杠以防止此方法將其解釋為 back-reference,然後需要再次轉義反斜杠以防止字符串文字使用它們:"..\\\\&.."

您可能希望使用塊形式來避免大量反斜杠。

哈希 replacement

如果參數 replacement 是哈希,並且 pattern 匹配其中一個鍵,則替換字符串是該鍵的值:

h = {'foo' => 'bar', 'baz' => 'bat'}
'food'.sub('foo', h) # => "bard"

請注意,符號鍵不匹配:

h = {foo: 'bar', baz: 'bat'}
'food'.sub('foo', h) # => "d"

堵塞

在塊形式中,將當前匹配字符串傳遞給塊;塊的返回值成為替換字符串:

s = '@'
'1234'.gsub(/\d/) {|match| s.succ! } # => "ABCD"

$1$2$`$&$'等特殊匹配變量已適當設置。

相關用法


注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 String類。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。