使用Go截断切片的每个成员

时间:2016-08-06 19:12:01

标签: string go

我刚开始使用Go,我在完成我想做的事情时遇到了一些麻烦。加载一个大文本文件后,其中每一行以我想要的单词开头,然后是单个和多空格分隔的文本,我不在乎。

我的第一行代码创建了一个行数组

lines := strings.Split( string( file ), "\n" )

下一步是截断我可以用split语句执行的每一行。我确信我可以使用for循环执行此操作,但我正在尝试学习Go中的一些更有效的操作(与c / c ++相比)

我希望我可以做这样的事情

lines := strings.Split( (lines...), "  " )

有更好的方法可以做到这一点,还是应该使用某种类型的for循环?

1 个答案:

答案 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]