如果字符串包含“a”然后是“z”,则ruby返回true

时间:2015-12-26 01:01:35

标签: ruby

我需要帮助编写一个带字符串的方法,如果字母“z”出现在之后的字母中,则返回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)

2 个答案:

答案 0 :(得分:3)

正则表达式对此最好。尝试

def nearby_az(string)
    (string =~ /a.{0,2}z/) != nil
end

修改 根据&#34; if语句要求的要求&#34; :)

def nearby_az(string)
    if (string =~ /a.{0,2}z/) != nil
        return true
    end
    return false
end

此代码的工作方式是在输入字符串中搜索&#34; a&#34;。之后,句号表示您可以拥有任何角色。之后你有{0,2}这是句号的修饰语,表示你可以有0到2的任何一个字符。在此之后你必须有一个&#34; z&#34;,这就满足了你必须在一个&#34; a&#34;的3个字符内的z。

我已将此正则表达式保存到regex101 here,因此您可以尝试各种输入以及更改正则表达式以更好地理解它。

答案 1 :(得分:1)

要修复您需要的代码:

  • 在循环结束时递增i。
  • 在3个下一个字母中搜索z字母
  • 满足条件时返回
  • 退出循环时返回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