Ruby中的String#split不符合预期

时间:2010-07-22 07:09:29

标签: ruby

File.open(path, 'r').each do |line| 
  row = line.chomp.split('\t')
  puts "#{row[0]}"
end

path是包含名称,年龄,专业,爱好等内容的文件路径

我期待输出只是名称,但我得到整条线。

为什么会这样?

2 个答案:

答案 0 :(得分:5)

这个问题已经有了一个公认的答案,但值得注意的是原始问题的原因是什么:

这是问题部分:

split('\t')

Ruby有几种形式用于引用字符串,它们有差异,通常是有用的。

引自Ruby Programming at wikibooks.org

  

...双引号旨在   解释转义字符,例如   新的线条和标签,以便它们出现   作为实际的新行和标签时   为用户呈现字符串。   但是,单引号显示   例如,实际的逃逸序列   显示\ n而不是换行。

请仔细阅读相关文章,了解%q%Q字符串的使用情况。或谷歌的“红宝石字符串分隔符”,或参见this SO question

因此'\t'被解释为“反斜杠+ t”,而"\t"是制表符。

String#split也会使用Regexp,在这种情况下可能会消除歧义:

split(/\t/)

答案 1 :(得分:0)

你的问题不是很清楚

split("\n") - 如果你想按行分割

split - 如果您想按空格分割

据我所知,你不需要chomp,因为它会删除所有“\ n”