在Python中,我可以迭代多行字符串。在Go中迭代多行字符串
x = """\
this is
my multiline
string!"""
for line in x.splitlines():
print(line)
可以这样做吗?
在Python中,我可以迭代多行字符串。在Go中迭代多行字符串
x = """\
this is
my multiline
string!"""
for line in x.splitlines():
print(line)
可以这样做吗?
您可以随时随地使用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()
回报在多字符串的结尾假的。在每个循环中,我们打印扫描返回的行。
如果你想如图所示的问题遍历一个多字符串中,然后使用此代码:
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
}
虽然这是比其他解决方案更简单,应该注意的是,如果换行恰好是'这不会剥离''\ r''字符‘\ r \ n’个'(可能是如果该字符串是从Windows上编辑的文件中读取的)。 'Scanner'正确处理所有有效的换行符。 – icza
@icza没有必要去掉'\ r'。 [返回字符('\ r')从原始字符串值中删除](https://golang.org/ref/spec#String_literals)。 –
我不是在谈论原始字符串文字,我正在讨论在Windows上编辑的文件(其中行结束符是“\ r \ n”'),如果这个文件被读取,例如用'ioutil.ReadFile()',它也会包含''r''字符。另外''\ r''字符不会从非原始字符串文字中删除。 – icza
你应该检查错误。请参阅'bufio'示例:https://golang.org/pkg/bufio/#example_Scanner_lines。 – peterSO