3 回答
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
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
}
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
- 3 回答
- 0 关注
- 308 浏览
添加回答
举报