没有从nil到整数的隐式转换

我有一个从html和使用split函数创建的字符串数组。 我试图通过以下方式迭代它:

html_array.each do |line| ... end 

我可以使用puts line.index('text')每个line中的字符串索引puts line.index('text') ,并且我可以puts字符放在带有puts line[17]的索引处(两者都不打印nil),但是当我合并时二合一命令就好

 puts line[line.index('text')] 

它给了我错误:

 no implicit conversion from nil to integer (TypeError) 

有人可以告诉我我做错了什么吗? 我是编程和ruby btw的新手。

line.index('text')在某些时候返回nil ,因为在行中找不到字符串“text”。 然后,您尝试访问line[nil] ,这是一个无效的数组索引。

这样的事情可能会更好:

 index = line.index('text') if index.nil? puts "Text not found" else puts line[index] end 

这将在尝试使用之前检查字符串的索引是否为nil(并且如果该行不包含该字符串将提醒您)。

只是为了追踪你的某些行是否有错误,请尝试:

 html_array.each do |line| puts (line[line.index('text')] rescue "nil") end 

这将为每一行打印一个“nil”,这是一个错误。 我怀疑每行都没有出现“文字”。 你能分享一下你想要完成的事情吗?

您可以轻松地完成以下操作:

  html_array.each do |line| if line.index("Text").present? puts line[line.index("Text")] end end