Answers:
用 tr
时要替换(翻译)单个字符。
tr
在单个字符上匹配(而不是通过正则表达式),因此在第一个字符串参数中不需要以相同顺序出现这些字符。找到一个字符后,它将替换为在第二个字符串参数的相同索引处找到的字符:
'abcde'.tr('bda', '123')
#=> "31c2e"
'abcde'.tr('bcd', '123')
#=> "a123e"
使用gsub
时,你需要使用正则表达式或当你想更换更长的字符串:
'abcde'.gsub(/bda/, '123')
#=> "abcde"
'abcde'.gsub(/b.d/, '123')
#=> "a123e"
tr
意思是“翻译”,就像“翻译字符”一样,就是它的作用。它以同名的Unix实用程序命名(以其晦涩和简短的名称而闻名)。
tr
只能用单个固定字符替换单个字符(尽管您可以将多个此类匹配项放在一个 tr
调用中),但速度很快。gsub
可以使用regex匹配复杂的模式,并替换为复杂的计算结果,但速度慢于tr
。tr
都比速度快几倍时gsub
。下面是关于如何快速基准tr
可以比gsub
。 github.com/JuanitoFatas/fast-ruby/blob/master/code/string/...
tr
返回的副本,str
其中的字符from_str
被中的相应字符替换to_str
。如果to_str
小于from_str
,则用其最后一个字符填充以保持对应关系。
http://apidock.com/ruby/String/tr
gsub
返回的副本,str
其中所有出现的pattern都替换为第二个参数。该模式通常是一个Regexp;如果以字符串形式给出,则其包含的任何正则表达式元字符都将按字面意义进行解释,例如,\d
将匹配反斜杠,后跟d
,而不是数字。
http://apidock.com/ruby/String/gsub