如果字符串由“a”和“z”组成,ruby将返回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

我需要帮助编写一个方法,该方法接收字符串,如果字母z出现在a之后的三个字母内,则返回true。您可以假设字符串只包含小写字母。以下是我所拥有的:

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看起来不太好!!应该使用。