tr和gsub有什么不同?
我正在阅读Ruby文档,并对gsub
和tr
之间的区别感到困惑。 两者有什么区别?
当你想要replace(翻译)单个字符时使用tr
。
tr
匹配单个字符(不是通过正则expression式),因此字符不需要在第一个string参数中以相同的顺序出现。 当find一个字符时,它将被replace为在第二个string参数中的相同索引处find的字符:
'abcde'.tr('bda', '123') #=> "31c2e" 'abcde'.tr('bcd', '123') #=> "a123e"
当需要使用正则expression式或者当您想要replace较长的子string时使用gsub
:
'abcde'.gsub(/bda/, '123') #=> "abcde" 'abcde'.gsub(/bd/, '123') #=> "a123e"
-
tr
只能用一个单一的固定字符replace单个字符(尽pipe你可以在单个tr
调用中放置多个这种types的匹配),但速度很快。 -
gsub
可以使用正则expression式来匹配复杂的模式,并且用一个复杂的计算结果代替,但是比tr
慢。
tr
返回str
一个副本,其中from_str
的字符被from_str
的相应字符to_str
。 如果to_str
比from_str
短,则用最后一个字符填充以保持对应关系。 http://apidock.com/ruby/String/tr
gsub
返回str
一个副本,其中所有出现的模式被第二个参数替代。 该模式通常是一个正则expression式; 如果以string的forms给出,它所包含的任何正则expression式元字符都将按字面解释,例如\d
将匹配反斜杠后跟d
,而不是数字。 http://apidock.com/ruby/String/gsub