如何在Ruby中检查字符串中的第一个字母?

时间:2013-08-27 11:08:17

标签: ruby

我正在编写测试文件,但我无法通过第二次测试,这里:

def translate(word)
    if word.start_with?('a','e','i','o','u')        
      word << "ay"  
    else        
      word << "bay"
    end
end

start_with?是正确的方法吗?

describe "#translate" do

  it "translates a word beginning with a vowel" do
    s = translate("apple")
    s.should == "appleay"
  end

  it "translates a word beginning with a consonant" do
    s = translate("banana")
    s.should == "ananabay"
  end

  it "translates a word beginning with two consonants" do
    s = translate("cherry")
    s.should == "errychay"
  end
end

编辑: 我的解决方案不完整。 我的代码只通过第一次测试,因为我能够将“ay”推到单词的末尾。通过第二次测试我错过的是删除第一个字母,如果它的辅音,在“香蕉”中是“b”。

7 个答案:

答案 0 :(得分:5)

您也可以这样做:

word << %w(a e i o u).include?(word[0]) ? 'ay' : 'bay'

在你的情况下使用正则表达式可能有点过分,但如果你想匹配更复杂的字符串,可能会很方便。

答案 1 :(得分:1)

如果单词也以辅音开头,看起来你要移除第一个字符,所以:

if word.start_with?('a','e','i','o','u')
  word[0] = ''
  word << 'ay'
else 
  consonant = word[0]
  word << "#{consonant}ay"
end

答案 2 :(得分:1)

word << word[0].match(/a|e|i|o|u/).nil? ? 'bay' : 'ay'

答案 3 :(得分:1)

您的代码意味着: 如果单词以('a','e','i','o','u')开头,则在末尾添加“ay” 否则在最后添加“bay”。

第二次测试将是“bananabay”而不是“ananabay”(以b作为第一个字母)

答案 4 :(得分:1)

def translate(word)
  prefix = word[0, %w(a e i o u).map{|vowel| "#{word}aeiou".index(vowel)}.min]
  "#{word[prefix.length..-1]}#{prefix}ay"
end

puts translate("apple")   #=> "appleay"
puts translate("banana")  #=> "ananabay"
puts translate("cherry")  #=> "errychay"

答案 5 :(得分:0)

以下代码通过了所有测试......

def translate(word)
  if word.start_with?('a','e','i','o','u')
    word<<'ay'
  else
    pos=nil
    ['a','e','i','o','u'].each do |vowel|
      pos = word.index(vowel)
      break unless pos.nil?
    end
    unless pos.nil?
      pre = word.partition(word[pos,1]).first
      word.slice!(pre)
      word<<pre+'ay'
    else
      #code to be executed when no vowels are there in the word
      #eg words fry,dry
    end
  end
end

答案 6 :(得分:0)

想通了我的第一份心血! 祝你好运!

def method(word)
  word[0].eql?("A" || "E" || "I" || "O" || "U")
end