当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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