英文:
Golang idiomatic way to remove a blank line from a multi-line string
问题
如果我有一个多行字符串,像这样:
这是一行
这是另一行
最好的方法是如何删除空行?我可以通过拆分、迭代和条件检查来实现,但是否有更好的方法?
英文:
If I have a multi line string like
this is a line
this is another line
what is the best way to remove the empty line? I could make it work by splitting, iterating, and doing a condition check, but is there a better way?
答案1
得分: 3
与ΔλЛ的答案类似,可以使用strings.Replace函数来实现:
// func Replace(s, old, new string, n int) string
// Replace函数返回将字符串s中的前n个非重叠的old实例替换为new后的副本。如果old为空,则它在字符串的开头和每个UTF-8序列之后匹配,从而为k个rune的字符串提供最多k+1个替换。如果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)
}
你可以在这里查看代码示例:https://play.golang.org/p/lu5UI74SLo
英文:
Similar to ΔλЛ's answer it can be done with strings.Replace:
> func Replace(s, old, new string, n int) string
Replace returns a copy of the string s with the first n non-overlapping instances of old replaced by new. If old is empty, it matches at the beginning of the string and after each UTF-8 sequence, yielding up to k+1 replacements for a k-rune string. If n < 0, there is no limit on the number of replacements.
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)
}
答案2
得分: 2
假设您希望输出与删除空行后的相同字符串,我会使用正则表达式:
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)
}
以下是翻译好的代码部分。
英文:
Assumming that you want to have the same string with empty lines removed as an output, I would use regular expressions:
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)
}
答案3
得分: 1
以下是翻译好的内容:
更通用的方法可能是这样的。
package main
import (
"fmt"
"regexp"
"strings"
)
func main() {
s := `
####
####
####
####
`
fmt.Println(regexp.MustCompile(`[\t\r\n]+`).ReplaceAllString(strings.TrimSpace(s), "\n"))
}
https://play.golang.org/p/uWyHfUIDw-o
英文:
The more generic approach would be something like this maybe.
package main
import (
"fmt"
"regexp"
"strings"
)
func main() {
s := `
####
####
####
####
`
fmt.Println(regexp.MustCompile(`[\t\r\n]+`).ReplaceAllString(strings.TrimSpace(s), "\n"))
}
答案4
得分: 0
为了去除所有空行,改进@syntagma的响应:
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)
}
英文:
To improve @syntagma response in order to remove all empty lines:
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)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论