如何从golang中删除\n?

tse*_*ies 15 parsing line go

file, _ := os.Open("x.txt")
    f := bufio.NewReader(file)

    for {
        read_line, _ := ReadString('\n')
        fmt.Print(read_line)


        // other code what work with parsed line...
        }
Run Code Online (Sandbox Code Playgroud)

结束它在每一行添加\n,结束程序工作,只用于最后一行...

请举例,我尝试任何结束任何解决方案,我发现这里不适合我.

Ale*_*Lew 32

你可以切掉最后一个角色:

read_line = read_line[:len(read_line)-1]
Run Code Online (Sandbox Code Playgroud)

也许更好的方法是使用字符串库:

read_line = strings.TrimSuffix(read_line, "\n")
Run Code Online (Sandbox Code Playgroud)

  • 尝试`import“ strings”`:-) (3认同)
  • 您必须使用结果:read_line = read_line [:len(read_line)+1] (2认同)

Ayu*_*mar 19

干净简单的方法

您还可以使用该strings.TrimSpace()函数,该函数还将删除任何额外的尾随或前导字符,例如 regex 的字符\n\r并且这种方法更加干净。

read_line = strings.TrimSpace(read_line)
Run Code Online (Sandbox Code Playgroud)

Go 文档: https: //pkg.go.dev/strings#TrimSpace


put*_*utu 11

如果您想逐行读取文件,使用起来bufio.Scanner会更容易.扫描仪不包括endline(\n\r\n)进入生产线.

file, err := os.Open("yourfile.txt")
if err != nil {
    //handle error
    return
}
defer file.Close()

s := bufio.NewScanner(file)
for s.Scan() {
    read_line := s.Text()

    // other code what work with parsed line...
}
Run Code Online (Sandbox Code Playgroud)

如果你想删除endline,我建议你使用TrimRightFunc,即

read_line = strings.TrimRightFunc(read_line, func(c rune) bool {
    //In windows newline is \r\n
    return c == '\r' || c == '\n'
})
Run Code Online (Sandbox Code Playgroud)

更新:
正如@GwynethLlewelyn指出的那样,使用TrimRight将更简单(更清洁),即

 read_line = strings.TrimRight(read_line, "\r\n")
Run Code Online (Sandbox Code Playgroud)

在内部,TrimRight函数调用TrimRightFunc,如果它匹配作为第二个参数给出的任何字符,将删除该字符TrimRight.

  • 使用`read_line = strings.TrimRight(read_line,"\ r \n")`这不是更容易吗? (3认同)