Ruby - 将字符串转换为CamelCase

时间:2014-07-03 22:26:03

标签: ruby string camelcasing

我正在进行Codewars的练习。练习是将字符串转换为驼峰案例。例如,如果我有

the-stealth-warrior

我需要将其转换为

theStealthWarrior

这是我的代码

def to_camel_case(str)
  words = str.split('-')
  a = words.first
  b = words[1..words.length - 1].map{|x|x.capitalize}
  new_array = []
  new_array << a << b
  return new_array.flatten.join('')
end

我刚刚在IRB中测试它并且它可以工作,但在代码大战中,它不会让我通过。我收到此错误消息。

NoMethodError: undefined method 'map' for nil:NilClass

我不明白这一点,我的方法绝对正确。

5 个答案:

答案 0 :(得分:0)

您需要考虑边缘情况。特别是在这种情况下,如果输入为空字符串,则words将为[],因此words[1..words.length - 1]将为nil

Codewars可能会使用一系列输入测试您的代码,包括emplty字符串(可能还有其他奇怪的情况)。

答案 1 :(得分:0)

以下在Ruby 2中适用于我,即使输入字符串中只有一个单词:

def to_camel_case(str)
   str.split('-').map.with_index{|x,i| i > 0 ? x.capitalize : x}.join
end

to_camel_case("the-stealth-warrior")   # => "theStealthWarrior"
to_camel_case("warrior")   # => "warrior"

我知道1.9.3中存在.with_index,但我不能保证它可以与早期版本的Ruby一起使用。

答案 2 :(得分:0)

更简单的更改文本的方法是:

irb(main):022:0> 'the-stealth-warrior'.gsub('-', '_').camelize
 => "TheStealthWarrior"

答案 3 :(得分:0)

这应该可以解决问题:

 str.gsub("_","-").split('-').map.with_index{|x,i| i > 0 ? x.capitalize : x}.join

它包含带下划线的单词

答案 4 :(得分:-1)

也许只有一个单词的测试用例?

在这种情况下,你会尝试在单词[1..0]上做一个地图,这是零。

添加逻辑来处理这种情况,你应该没事。