为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中迭代多行字符串

在 Go 中迭代多行字符串

Go
慕森王 2021-11-15 16:50:08
在 Python 中,我可以遍历多行字符串。x = """\this ismy multilinestring!"""for line in x.splitlines():    print(line)Go 也可以这样做吗?
查看完整描述

3 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

您可以bufio.Scanner在 Go 中使用它从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。在每个循环中,我们打印扫描返回的行。


https://play.golang.org/p/U9_B4TsH6M


查看完整回答
反对 回复 2021-11-15
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

如果要迭代问题中所示的多行字符串文字,请使用以下代码:


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

}


查看完整回答
反对 回复 2021-11-15
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

我认为 usingbufio是最好的选择,但如果您确实需要拆分一个字符串,我认为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)

   }

}

https://golang.org/pkg/strings#TrimRight


查看完整回答
反对 回复 2021-11-15
  • 3 回答
  • 0 关注
  • 308 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信