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

Ora*_*cle 13 string newline file input go

我一直试图读取一个文件,然后将读取的材料放入一个字符串中.然后字符串将逐行分成多个字符串:

absPath, _ := filepath.Abs("../Go/input.txt")
data, err := ioutil.ReadFile(absPath)
if err != nil {
    panic(err)
}
input := string(data)
Run Code Online (Sandbox Code Playgroud)

input.txt读作:

一个

强壮的小鸟

非常

宽容的心

有一天去学校

忘记了他的食物

然而,

re = regexp.MustCompile("\\n")
input = re.ReplaceAllString(input, " ")
Run Code Online (Sandbox Code Playgroud)

将文本变成了一个乱七八糟的混乱:

他的食物atot

我不确定如何更换新行会如此糟糕到文本反转的程度

小智 25

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

re = regexp.MustCompile(`\r?\n`)
input = re.ReplaceAllString(input, " ")
Run Code Online (Sandbox Code Playgroud)

反引号将确保您不需要在正则表达式中引用反斜杠.我使用问号回车,以确保您的代码也适用于其他平台.


Sal*_*ali 5

我认为您不需要使用正则表达式来完成如此简单的任务。这可以通过

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

example of removing \n

  • 没有理由变得咄咄逼人。您关于不一定需要正则表达式的观点很好,但您的回答并不能帮助 OP 解决他的实际问题。 (9认同)
  • 如果不是 Jens 的回答,OP 不会知道 '\r' 是问题所在(并且 OP 的输出足以知道事实确实如此)。您的回答只是为 OP 提供了一种不同的方式来到达他已经所在的位置。这不是关于无法修改有效的解决方案,而是关于您的解决方案......好吧......不是OP问题的解决方案。 (9认同)
  • 但这并不能解决问题,因为 - 正如 Jens 提到的 - Windows 换行符 (`\r\n`) 会导致所描述的效果,当仅替换 `\n` 而将 `\r` 留在字符串中时。 (3认同)
  • 你一定是在开玩笑。如果您知道 `\r` 的作用,那么您就会知道 OP 的输出正是由那个引起的——而不是他是否使用了正则表达式。只有当您也应用 Jens 的修复程序时,您的答案才有效,否则根本不会有任何区别。 (2认同)