如何添加字符串" \ n"字面上在Ruby的每一行的末尾?

时间:2016-04-02 02:49:39

标签: ruby string

这是一个字符串str

str = "line1
       line2
       line3"

我们想添加字符串" \ n"到每一行的末尾:

str = "line1 \n
       line2 \n
       line3 \n"

定义了一种方法:

   def mod_line(str)
     s = ""
     str.each_line do |l|
       s += l + '\\n'
     end
   end

问题在于' \ n'是换行符,即使使用转义str也未添加到\的末尾。添加' \ n'的正确方法是什么?字面意思到每一行?

4 个答案:

答案 0 :(得分:3)

独立于平台的解决方案:

str.gsub(/\R/) {  " \\n#{$~}" } 

它将搜索换行符/回车符并将其替换为\n前面的。

答案 1 :(得分:2)

String#gsub / String#gsub!加上一个非常简单的regular expression可以用来实现这一目标:

str = "line1
       line2
       line3"
str.gsub!(/$/, ' \n')
puts str

输出:

line1 \n
       line2 \n
       line3 \n

答案 2 :(得分:1)

<击> \n需要被解释为一个特殊的角色。你需要用双引号。

"\n"

您的尝试:

'\\n'

只能逃避反斜杠,这实际上是多余的。无论是否在反斜杠上转义,它都会为您提供反斜杠,后跟字母n

此外,您的方法mod_line会返回str.each_line的结果,这是原始字符串str。您需要返回修改后的字符串s

def mod_line(str)
  ...
  s
end

<击> 顺便说一下,请注意原始字符串的每一行在每行的末尾都有"\n",因此您要将第二行"\n"添加到每一行(使其成为两行)。

答案 3 :(得分:1)

这是我最接近它的。

def mod_line(str)
         s = ""
     str.each_line do |l|
           s += l
     end
         p s
   end

使用p而不是puts会在每行的末尾留下\ n。