String Golang:从文本文件替换字符串中的换行符

String Golang:从文本文件替换字符串中的换行符,string,file,input,go,newline,String,File,Input,Go,Newline,我一直在尝试读取一个文件,然后将读取的内容放入字符串中。然后该字符串将按行拆分为多个字符串: absPath, _ := filepath.Abs("../Go/input.txt") data, err := ioutil.ReadFile(absPath) if err != nil { panic(err) } input := string(data) input.txt的格式如下: a 强壮的小鸟 带着非常 大心脏 去 有一天去学校 他把食物忘在家里了 家

我一直在尝试读取一个文件,然后将读取的内容放入字符串中。然后该字符串将按行拆分为多个字符串:

absPath, _ := filepath.Abs("../Go/input.txt")
data, err := ioutil.ReadFile(absPath)
if err != nil {
    panic(err)
}
input := string(data)
input.txt的格式如下:

a

强壮的小鸟

带着非常

大心脏

有一天去学校

他把食物忘在家里了

但是,

re = regexp.MustCompile("\\n")
input = re.ReplaceAllString(input, " ")
将文本变成一堆乱七八糟的内容:

把他的食物放在桌上


我不确定替换换行符怎么会搞得如此糟糕,以至于文本本身会反转

我猜您是在使用Windows运行代码。请注意,如果打印出结果字符串的长度,它将显示超过100个字符的内容。原因是Windows不仅使用换行符(
\n
),而且还使用回车符(
\r
)-因此Windows中的换行符实际上是
\r\n
,而不是
\n
。要从字符串中正确筛选出它们,请使用:

re := regexp.MustCompile(`\r?\n`)
input = re.ReplaceAllString(input, " ")

反斜杠将确保不需要在正则表达式中引用反斜杠。我在回车中使用了问号,以确保您的代码也能在其他平台上运行。

我认为您不需要使用regex来完成如此简单的任务。这一点可以通过以下方法实现:

absPath, _ := filepath.Abs("../Go/input.txt")
data, _ := ioutil.ReadFile(absPath)
input := string(data)
strings.Replace(input, "\n","",-1)

但这并不能解决问题,因为正如Jens所提到的,Windows换行符(
\r\n
)在只替换
\n
而将
\r
保留在字符串中时会产生所描述的效果。@madsen您是否认为如果
\r\n
会导致问题,删除
\r\n
是否有意义?或者正在替换行
strings.Replace(输入“\n”,”,-1)
strings.Replace(输入“\r\n”,”,-1)
对您来说是一项不可能完成的任务?没有理由变得咄咄逼人。你关于不一定需要正则表达式的观点很好,但你的回答无助于OP解决他的实际问题。@madsen这里没有攻击性。对于一些人来说,修改工作解决方案以满足他们的需求是如此困难,这让他们感到惊讶,即使修改只是添加2个字符那么简单。我的回答将有助于OP,如果他能弄清楚他的原始文件是什么样子的(这很容易找到)。你们的观点是,Jens的回答提到了Windows,但若你们阅读OP的问题,你们将看不到OP的操作系统。我可以猜测,给出建议,但在我看来这是毫无用处的。如果没有Jens的回答,OP不会知道
\r
是问题所在(OP的输出足以知道事实就是如此)。你的回答只是为OP提供了一种不同的方式,让他达到现在的状态。这不是因为无法修改工作解决方案,而是因为您的解决方案。。。好。。。不是OP问题的解决方案。