0

我有一个通过获取 html 并使用 split 函数创建的字符串数组。我正在尝试通过以下方式迭代它:

html_array.each do |line|
    ...
end

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

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

它给了我错误:

no implicit conversion from nil to integer (TypeError)

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

4

3 回答 3

4

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

像这样的东西可能会更好:

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

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

于 2012-09-11T02:31:25.270 回答
0

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

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

这将为出现错误的每一行打印一个“nil”。我怀疑“文本”不会出现在每一行中。你能分享一下你正在努力完成的事情吗?

于 2012-09-11T02:28:45.997 回答
0

你可以像下面这样轻松地做到这一点:

   html_array.each do |line|
        if line.index("Text").present?
          puts line[line.index("Text")]
        end
    end
于 2017-10-05T10:51:02.717 回答