本文簡要介紹ruby語言中 String類
的用法。
String 對象具有任意字節序列,通常表示文本或二進製數據。可以使用 String::new
或作為文字創建 String 對象。
String
對象與 Symbol
對象的不同之處在於, Symbol
對象旨在用作標識符,而不是文本或數據。
您可以使用以下命令顯式創建 String 對象:
您可以使用以下方法將某些對象轉換為字符串:
-
方法String。
一些 String 方法會修改 self
。通常,名稱以 !
結尾的方法會修改 self
並返回 self
;通常一個類似命名的方法(沒有 !
)返回一個新字符串。
一般來說,如果同時存在 bang 和 non-bang 版本的方法,則 bang!變異和非爆炸!才不是。但是,沒有 bang 的方法也可以發生變異,例如 String#replace
。
替代方法
這些方法執行替換:
-
String#sub
:一個替換(或沒有);返回一個新字符串。 -
String#sub!
:一個替換(或沒有);返回self
。 -
String#gsub
:零個或多個替換;返回一個新字符串。 -
String#gsub!
:零個或多個替換;返回self
。
這些方法中的每一個都需要:
-
第一個參數
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 StringScanner skip_until用法及代碼示例
- Ruby StringScanner search_full用法及代碼示例
- Ruby String.match?用法及代碼示例
- Ruby StringScanner.beginning_of_line?用法及代碼示例
- Ruby StringScanner restsize用法及代碼示例
- Ruby String delete!用法及代碼示例
- Ruby String chop!用法及代碼示例
- Ruby String.unpack用法及代碼示例
- Ruby String each_line用法及代碼示例
- Ruby StringScanner.pos=用法及代碼示例
- Ruby StringScanner check_until用法及代碼示例
- Ruby String getbyte用法及代碼示例
- Ruby String gsub用法及代碼示例
- Ruby String.scan用法及代碼示例
- Ruby String.dump用法及代碼示例
- Ruby StringScanner getbyte用法及代碼示例
- Ruby String hash用法及代碼示例
- Ruby String casecmp用法及代碼示例
- Ruby String delete_suffix用法及代碼示例
- Ruby String encoding用法及代碼示例
- Ruby String.oct用法及代碼示例
- Ruby String.size用法及代碼示例
- Ruby String chr用法及代碼示例
- Ruby String.scrub用法及代碼示例
- Ruby String count()用法及代碼示例
注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 String類。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。