在Python中,我可以遍历多行字符串。
x = """\
this is
my multiline
string!"""
for line in x.splitlines():
print(line)
Can Go可以这样做吗?
答案 0 :(得分:15)
您可以在Go中使用bufio.Scanner
,它会迭代来自io.Reader
的行。以下示例根据给定的多行字符串创建一个阅读器,并将其传递给扫描仪工厂函数。 scanner.Scan()
的每次调用都会将读取器拆分到下一行并缓冲该行。如果没有更多行,则返回false。调用scanner.Text()
将返回缓冲的拆分。
var x string = `this is
my multiline
string`
scanner := bufio.NewScanner(strings.NewReader(x))
for scanner.Scan() {
fmt.Println(scanner.Text())
}
在示例中,for循环将继续,直到Scan()
在多行字符串结尾处返回false。在每个循环中,我们打印扫描返回的行。
答案 1 :(得分:9)
如果要迭代问题中显示的多行字符串文字,请使用以下代码:
for _, line := range strings.Split(strings.TrimSuffix(x, "\n"), "\n") {
fmt.Println(line)
}
Run the code on the playground
如果要迭代从文件读取的数据,请使用bufio.Scanner。该文档有一个示例,说明如何迭代行:
scanner := bufio.NewScanner(f) // f is the *os.File
for scanner.Scan() {
fmt.Println(scanner.Text()) // Println will add back the final '\n'
}
if err := scanner.Err(); err != nil {
// handle error
}
答案 2 :(得分:0)
我认为使用 bufio
是最好的选择,但如果您确实需要拆分一个
字符串,我认为 TrimRight
比 TrimSuffix
好,因为它可以覆盖任何
重复尾随换行符或回车符的组合:
package main
import "strings"
func main() {
x := `this is
my multiline
string!
`
for _, line := range strings.Split(strings.TrimRight(x, "\n"), "\n") {
println(line)
}
}