如果字符串由“a”和“z”组成,ruby将返回true
我需要帮助编写一个方法,该方法接收字符串,如果字母z出现在a之后的三个字母内,则返回true。您可以假设字符串只包含小写字母。以下是我所拥有的:如果字符串由“a”和“z”组成,ruby将返回true,ruby,Ruby,我需要帮助编写一个方法,该方法接收字符串,如果字母z出现在a之后的三个字母内,则返回true。您可以假设字符串只包含小写字母。以下是我所拥有的: def nearby_az(string) string.downcase! i = 0 while i < string.length if (string[i] == "a" && string[i] == "z") true else f
def nearby_az(string)
string.downcase!
i = 0
while i < string.length
if (string[i] == "a" && string[i] == "z")
true
else
false
end
end
end
puts('nearby_az("baz") == true: ' + (nearby_az('baz') == true).to_s)
puts('nearby_az("abz") == true: ' + (nearby_az('abz') == true).to_s)
puts('nearby_az("abcz") == true: ' + (nearby_az('abcz') == true).to_s)
puts('nearby_az("a") == false: ' + (nearby_az('a') == false).to_s)
puts('nearby_az("z") == false: ' + (nearby_az('z') == false).to_s)
puts('nearby_az("za") == false: ' + (nearby_az('za') == false).to_s)
正则表达式是最好的选择。试一试
def nearby_az(string)
(string =~ /a.{0,2}z/) != nil
end
编辑:
根据if声明要求:
def nearby_az(string)
if (string =~ /a.{0,2}z/) != nil
return true
end
return false
end
此代码的工作方式是在输入字符串中搜索a。在此之后,句点表示可以有任何字符。之后有{0,2},它是句点的修饰符,表示可以有任何字符的0到2。在此之后,您必须有一个z,这满足了您必须有一个a的3个字符以内的z
我已将此正则表达式保存到regex101,以便您可以尝试各种输入,并更改正则表达式以更好地理解它。要修复代码,您需要: 循环结束时的增量i。 在接下来的3个字母中搜索z字母 满足条件时返回true 退出循环时返回false 下面是它的外观:
def nearby_az(string)
string.downcase!
i = 0
while i < string.length do
return true if string[i] == "a" && string[i+1,3].include?(?z)
i+=1
end
return false
end
您当前的表达式将始终为false。你不能让值同时为a和z。用z结束regexp会更好如果下面的代码可以写在if语句中,那会更好,因为这是我的指导老师要求的。谢谢,如果你也能解释一下的话,因为我是一个初学者,我想了解代码是如何工作的。谢谢@Martin Konecny:string=~/a.{0,2}z/!=谢谢您编辑的if语句版本和解释。你能告诉我=~是什么意思吗?我知道nil的意思不等于null,但如果您能告诉我它之前的代码是如何关联的,也可以。谢谢。看看这里:如果它没有找到我们创建的正则表达式模式,它将返回null。否则,它将返回一个数字,指示它找到该模式的字符串中的索引。所以null表示我们没有找到任何东西,数字表示我们找到了,我们只是把它们转换成布尔值nil看起来不太好!!应该使用。