我正试图摆脱括号[]
和新线\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\"]
我尝试过使用.gsub
,chomp
和split
,但也许我错了。
您的代码存在一个小问题,导致您遇到的结果。
当你使用:
name1 = File.readlines('first.txt').sample(1)
返回值不是String,而是具有1个随机样本的Array。即:
["Jhon"]
这就是为什么在使用["Jhon"]
时得到输出print
的原因。
由于您期望(并且更喜欢)字符串,请尝试以下方法:
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
将返回一个对象而不是一个数组:
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在输出结尾添加换行符。打印没有。使用打印。它可以解决您的问题。另外,使用.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
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