Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何添加字符串"\";在Ruby中的每一行的末尾?_Ruby_String - Fatal编程技术网

如何添加字符串"\";在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
一个似乎是换行符。你得到了你想要的东西。您可能看到的故障是输出故障。