在Ruby中循环一个字符串
我正在输入在Ruby中循环一个字符串,ruby,string,Ruby,String,我正在输入“901000”作为以下方法的参数,我希望它删除最后三个零并返回“901” 但它会返回“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
“901000”
作为以下方法的参数,我希望它删除最后三个零并返回“901”
但它会返回
“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"
我也不喜欢它,但这里有一种不使用正则表达式的方法:
str.reverse.to\u I.to\u s.reverse
。还有str.chomp!(“0”)当str[-1]==“0”
@mudasobwa时,您也可以使用chop代码>因为while循环已经检查了“0”
是最后一个字符。我假设您想删除所有尾随的零,而不一定是三个。如果是这样,你应该通过编辑来澄清这一点。使用str.chop
或str.chop
而不是str.delete(str[i])
。
"901000".sub(/0+\z/, "") # => "901"
"901000"[/.*?(?=0+\z)/] # => "901"