读取 Ruby 中的文件时如何删除换行符

How to remove line break when reading files in Ruby

我正试图摆脱括号 [] 和新行 \n 的打印。

我的代码如下:

name1 = File.readlines('first.txt').sample(1)
name2 = File.readlines('middle.txt').sample(1)
name3 = File.readlines('last.txt').sample(1)

name = print (name1.strip 
    print name2.strip 
    print name3.strip)

puts name

我希望输出看起来像 JoshBobbyGreen。 然而,它看起来像:

[\"Josh\n\"][\"Bobby\n\"][\"Green\n\"]

我试过使用 .gsubchompsplit,但也许我用错了。

puts 在输出末尾添加一个换行符。打印没有。 使用打印。它可能会解决您的问题。另外,使用 .strip.

"\tgoodbye\r\n".strip   #=> "goodbye"

如果:

name1 = ["Josh\n"]
name2 = ["Bobby\n"]
name3 = ["Green\n"]

只是:

puts [name1, name2, name3].map { |a| a.first.strip }.join('')
  #=> JoshBobbyGreen

您的代码有一个小问题导致了您遇到的结果。

当您使用:

name1 = File.readlines('first.txt').sample(1)

return编辑的值不是一个字符串,而是一个包含 1 个随机样本的数组。即:

["Jhon"]

这就是使用 print 时得到输出 ["Jhon"] 的原因。

既然您期望(并且更喜欢)一个字符串,请试试这个:

name1 = File.readlines('first.txt').sample(1)[0]
name2 = File.readlines('middle.txt').sample(1)[0]
name3 = File.readlines('last.txt').sample(1)[0]

或:

name1 = File.readlines('first.txt').sample(1).pop
name2 = File.readlines('middle.txt').sample(1).pop
name3 = File.readlines('last.txt').sample(1).pop

或者,可能是你的意思,没有参数,sample将return一个对象而不是数组:

name1 = File.readlines('first.txt').sample
name2 = File.readlines('middle.txt').sample
name3 = File.readlines('last.txt').sample

此外,在打印时,如果您创建一个字符串来包含您想要的所有空格和格式,那会更好。即:

name1 = File.readlines('first.txt').sample(1).pop
name2 = File.readlines('middle.txt').sample(1).pop
name3 = File.readlines('last.txt').sample(1).pop

puts "#{name1} #{name2} #{name3}."
# or
print "#{name1} #{name2} #{name3}."
puts %w(first middle last).map { |e| IO.readlines("#{e}.txt").sample.strip }.join

为了避免多余的 \n 我宁愿使用 split:

File.read('first.txt').split("\n") # double quotes are important!

为了避免使用不带参数的 sample 方法获取数组:

File.read('first.txt').split("\n").sample

还要考虑 File.readlines

中的可选 chomp 参数
File.readlines("/path/to/file", chomp: true)