如何添加字符串"\";在Ruby中的每一行的末尾?
这是一个字符串如何添加字符串"\";在Ruby中的每一行的末尾?,ruby,string,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”是换行符,即使使用esca
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”是换行符,即使使用escape\
也没有添加到str
的末尾。将“\n”逐字添加到每一行的正确方法是什么?/plus一个非常简单的方法可以用来实现这一点:
str = "line1
line2
line3"
str.gsub!(/$/, ' \n')
puts str
输出:
line1 \n
line2 \n
line3 \n
\n
需要解释为特殊字符。你需要把它用双引号引起来
"\n"
您的尝试:
'\\n'
只跳过反斜杠,这实际上是多余的。无论是否在反斜杠上转义,它都会给您一个反斜杠,后跟字母n
。
另外,您的方法mod_line
返回str.each_line
的结果,即原始字符串str
。您需要返回修改后的字符串s
:
def mod_line(str)
...
s
end
顺便说一句,请注意原始字符串的每一行在每一行的末尾都已经有了“\n”
,因此您要将第二个“\n”
添加到每一行(使其成为两行)。
这是我最接近它的地方
def mod_line(str)
s = ""
str.each_line do |l|
s += l
end
p s
end
使用p而不是puts将\n保留在每行的末尾 独立于平台的解决方案:
str.gsub(/\R/) { " \\n#{$~}" }
它将搜索换行符/回车符,并将它们替换为它们自己的换行符,如果
每行
有效,则每行的末尾必须有\n个换行符。但无论如何,你都应该向我们展示你得到了什么。结尾需要“\n”。与ruby的换行无关。7urkm3n
,{s+=“{l}\n}
如何适合该方法?@user938363抱歉应该是这样的s+=“{l}\n”
您的描述是错误的。当您编写“…\n…”
时,相关部分表示结尾字符“\n”
。您需要将其写入“…\\n…”
。但你为什么在这里用这么混乱的字串来问问题呢?你不认为如果你使用其他字符串,你的问题会更清楚吗?@cremno谢谢。这个问题在这方面有误导性,因为它用双引号写“\n”(没有代码格式)。什么是%(str=“#{str}”)
?就不能是str?而且,您的输出似乎是错误的。您不应该使用\\n
s吗?同时使用p
和put
与字符串本身无关;is改变了字符串的打印方式。@mudasobwa但是p
返回接收者,不像put
@sawa那么呢?上面的代码是:)我不知道@sawa,也许这不值得<代码>\R是脆弱的。事实上,它被外推到一个连接正则表达式的组合,这阻止了它在regexp之外使用。实际上得到了2个\n
一个似乎是换行符。你得到了你想要的东西。您可能看到的故障是输出故障。