这是一个字符串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'的正确方法是什么?字面意思到每一行?
答案 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。