我刚开始使用Go,我在完成我想做的事情时遇到了一些麻烦。加载一个大文本文件后,其中每一行以我想要的单词开头,然后是单个和多空格分隔的文本,我不在乎。
我的第一行代码创建了一个行数组
lines := strings.Split( string( file ), "\n" )
下一步是截断我可以用split语句执行的每一行。我确信我可以使用for循环执行此操作,但我正在尝试学习Go中的一些更有效的操作(与c / c ++相比)
我希望我可以做这样的事情
lines := strings.Split( (lines...), " " )
有更好的方法可以做到这一点,还是应该使用某种类型的for循环?
答案 0 :(得分:1)
使用bufio.NewScanner
然后word := strings.Fields(scanner.Text())
和slice = append(slice, word[0])
就像这样的工作示例代码:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := ` wanted1 not wanted
wanted2 not wanted
wanted3 not wanted
`
slice := []string{}
// scanner := bufio.NewScanner(os.Stdin)
scanner := bufio.NewScanner(strings.NewReader(s))
for scanner.Scan() {
word := strings.Fields(scanner.Text())
if len(word) > 0 {
slice = append(slice, word[0])
}
}
fmt.Println(slice)
}
使用strings.Fields(line)
这样的工作示例代码:
package main
import "fmt"
import "strings"
func main() {
s := `
wanted1 not wanted
wanted2 not wanted
wanted3 not wanted
`
lines := strings.Split(s, "\n")
slice := make([]string, 0, len(lines))
for _, line := range lines {
words := strings.Fields(line)
if len(words) > 0 {
slice = append(slice, words[0])
}
}
fmt.Println(slice)
}
输出:
[wanted1 wanted2 wanted3]