在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