我正在尝试将字符串"10010"
反转为"01101"
。我想我可以尝试使用gsub
方法,如ruby文档指南中的类似示例所示:
`"10010".gsub(/[10]/ "1" => "0", "0" => "1")` .
但事实并非如此。我认为gsub
的论点不正确。根据我的逻辑,我捕获的是INTEGER 1和0而不是字符串,但我不太清楚如何解决这个问题。有没有办法可以替换.push / .pop等数字,然后将整数更改为字符串?
答案 0 :(得分:6)
要将0
更改为1
,反之,不需要gsub
,String#tr
方法更简单,更快捷:
'1010'.tr('10', '01')
# => "0101"
'10010'.tr('10', '01')
# => "01101"
答案 1 :(得分:4)
您的方法有效,您只是错过了一个逗号:
"10010".gsub(/[01]/, "1" => "0", "0" => "1")
#=> 01101
答案 2 :(得分:3)
虽然你可以使用gsub
,但要以正确的方式进行操作并旋转位:
("10010".to_i(2) ^ 0xff).to_s(2) # => "11101101"
使用gsub
会导致错误答案,因为01101
与反转8位数字的位不同:
'01101'.to_i(2) # => 13
'11101101'.to_i(2) # => 237
这可能有助于您了解正在发生的事情:
'%08b' % 0x55 # => "01010101"
'%08b' % 0xff # => "11111111"
'%08b' % 0xaa # => "10101010"
'%08b' % (0x55 ^ 0xff) # => "10101010"
答案 3 :(得分:0)
如果你不关心效率(因为你会读三次字符串):
irb(main):004:0> puts "10010".gsub("1", "X").gsub("0", "1").gsub("X", "0")
01101
至于你的方法,你确定你不会错过逗号吗?
irb(main):004:0> puts "10010".gsub("1", "X").gsub("0", "1").gsub("X", "0")
01101