String Golang从多行字符串中删除空行的惯用方法

String Golang从多行字符串中删除空行的惯用方法,string,replace,go,String,Replace,Go,如果我有一个多行字符串,比如 this is a line this is another line 删除空行的最佳方法是什么?我可以通过拆分、迭代和执行条件检查使其工作,但有更好的方法吗?如果您希望将具有空行的相同字符串作为输出删除,我将使用正则表达式: import ( "fmt" "regexp" ) func main() { var s = `line 1 line 2 line 3` regex, err := regexp.Compile

如果我有一个多行字符串,比如

this is a line

this is another line

删除空行的最佳方法是什么?我可以通过拆分、迭代和执行条件检查使其工作,但有更好的方法吗?

如果您希望将具有空行的相同字符串作为输出删除,我将使用正则表达式:

import (
    "fmt"
    "regexp"
)

func main() {

    var s = `line 1
line 2

line 3`

    regex, err := regexp.Compile("\n\n")
    if err != nil {
        return
    }
    s = regex.ReplaceAllString(s, "\n")

    fmt.Println(s)
}

与ΔλЛ的答案类似,它可以用字符串完成。替换:

func替换(s,旧,新字符串,n int)字符串 Replace返回字符串s的副本,其中前n个非重叠的old实例被new替换。如果old为空,则它在字符串的开头和每个UTF-8序列之后匹配,产生最多k+1个k-rune字符串替换。如果n<0,则更换的数量没有限制


更通用的方法可能是这样的

主程序包
进口(
“fmt”
“regexp”
“字符串”
)
func main(){
s:=`
#### 
####
####
####
`
fmt.Println(regexp.MustCompile(`[\t\r\n]+`).ReplaceAllString(strings.TrimSpace),“\n”))
}

如果字符串是通过迭代一个大片段获得的,您会推荐哪一个来提高性能?正则表达式还是迭代?我还是推荐正则表达式,不过如果您以后想合并这些字符串(比如说,合并成一个片段),那么
string.Split()
和迭代可能是更好的选择。谢谢@REACHUS。非常感谢,我不同意。“如果字符串是在一个巨大的片段中获得的”,也称为[]字符串。因此,为了应用正则表达式,您需要将所述巨大片段转换为一个既消耗时间又消耗内存的字符串,然后再应用正则表达式并将该字符串转换回[]字符串。实际上,[]字符串中的空行将由符文
'\n'
表示,该符文可以通过简单的比较来识别。@MarkusWMahlberg据我所知,单个元素a
[]字符串
将包含多行字符串。然后,用正则表达式过滤掉空行是有意义的。但是,如果一个切片的单个元素表示一行,那么在切片上迭代并通过与
'\n'
进行比较来检查元素是否为空行当然会更有效。这应该是更好的答案
package main

import (
    "fmt"
    "strings"
)

func main() {

    var s = `line 1
line 2

line 3`

    s = strings.Replace(s, "\n\n", "\n", -1)

    fmt.Println(s)
}