我正在进行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
我不明白这一点,我的方法绝对正确。
答案 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]上做一个地图,这是零。
添加逻辑来处理这种情况,你应该没事。