本文简要介绍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类。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。