我输入"901000"
作为以下方法的参数,我希望它删除最后三个零并返回"901"
。
def zeros(x)
str = x.to_s
i = str.length-1
while str[i] == "0"
str = str.delete(str[i])
i = i-1
end
return str
end
但它返回"91"
而不是。我无法理解为什么我的代码不起作用。有人可以帮忙吗?
起初,str
是"901000"
,i = str.length-1
是5
,而str[i]
是"0"
。因此,
str = str.delete(str[i])
相当于
str = "901000".delete("0")
那给你"91"
。
然后,由i = i-1
,i
变成4
,str[i]
(相当于"91"[4]
)变成nil
,而str[i] == 0
(相当于nil == 0
)变成false
。所以循环结束,返回值str
,这是"91"
。
要做你想做的事,一些简单的方法是:
"901000".sub(/0+\z/, "") # => "901"
"901000"[/.*?(?=0+\z)/] # => "901"