如果我有一个多行字符串,例如:
this is a line
this is another line
什么是删除空行的最佳方法?我可以通过拆分、迭代和进行条件检查来实现,但是否有更好的方法?
func Replace(s, old, new string, n int) string Replace 函数返回将 s 字符串中前 n 个不重叠的 old 子串替换为 new 后得到的新字符串副本。若 old 为空,则匹配 s 字符串开头和每个 UTF-8 序列之后,最多可产生 k+1 次替换,其中 k 表示字符串 s 中 rune 的数量。若 n < 0,则没有替换次数限制。
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)
}
假设你想要输出相同的字符串,但删除了空行,我会使用正则表达式:
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)
}
string.Split()
和迭代可能是更好的选择。 - syntagma'\n'
表示,可以通过简单比较来识别。 - Markus W Mahlberg[]string
中的单个元素将包含多行字符串。因此,使用正则表达式过滤掉空行是有意义的。然而,如果切片的单个元素表示单个行,则迭代切片并通过将其与 '\n'
进行比较来检查元素是否为空行当然更有效率。 - syntagmapackage main
import (
"fmt"
"regexp"
"strings"
)
func main() {
s := `
####
####
####
####
`
fmt.Println(regexp.MustCompile(`[\t\r\n]+`).ReplaceAllString(strings.TrimSpace(s), "\n"))
}
import (
"fmt"
"regexp"
)
func main() {
var s = `line 1
line 2
line 3`
regex, _ := regexp.Compile(`\n{2,}`)
s = regex.ReplaceAllString(s, "\n")
fmt.Println(s)
}