猿问

在 Go 中迭代多行字符串

在 Python 中,我可以遍历多行字符串。


x = """\

this is

my multiline

string!"""


for line in x.splitlines():

    print(line)

Go 也可以这样做吗?


慕森王
浏览 309回答 3
3回答

aluckdog

您可以bufio.Scanner在 Go 中使用它从io.Reader. 以下示例从给定的多行字符串创建读取器并将其传递给扫描仪工厂函数。每次调用都会scanner.Scan()在下一行拆分读取器并缓冲该行。如果没有更多行,则返回 false。调用scanner.Text()返回缓冲的拆分。var x string = `this ismy multilinestring`scanner := bufio.NewScanner(strings.NewReader(x))for scanner.Scan() {    fmt.Println(scanner.Text())}在该示例中,for 循环将继续,直到Scan()在多行字符串的末尾返回 false。在每个循环中,我们打印扫描返回的行。https://play.golang.org/p/U9_B4TsH6M

慕丝7291255

如果要迭代问题中所示的多行字符串文字,请使用以下代码: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.Filefor scanner.Scan() {    fmt.Println(scanner.Text()) // Println will add back the final '\n'}if err := scanner.Err(); err != nil {   // handle error}

料青山看我应如是

我认为 usingbufio是最好的选择,但如果您确实需要拆分一个字符串,我认为TrimRight它比 更好TrimSuffix,因为它可以涵盖重复尾随换行符或回车符的任何组合:package mainimport "strings"func main() {   x := `this ismy multilinestring!`   for _, line := range strings.Split(strings.TrimRight(x, "\n"), "\n") {      println(line)   }}https://golang.org/pkg/strings#TrimRight
随时随地看视频慕课网APP

相关分类

Go
我要回答