如何在golang中将[] string或[] byte类型传递给SplitAfterN?

时间:2019-07-19 07:45:13

标签: string file go

我正在逐行读取文件,并且希望根据子字符串拆分行。但是,当我在读取行通过的情况下使用SplitAfterN时,我正面临以下错误,

无法将“变量”([]字符串类型)转换为字符串类型

其中“变量” = []字符串类型

package main

import (
    "bufio"
    "flag"
    "fmt"
    "log"
    "os"
    "strings"
)

func main() {
    var fLine []string

    FileName := flag.String("fpath", "Default file path", "File path description ")
    flag.Parse()

    fptr, err := os.Open(*FileName)
    if err != nil {
        log.Fatal(err)
    }

    FileScanner := bufio.NewScanner(fptr)
    for FileScanner.Scan() {
        // Append each line into one buffer while reading
        fLine = append(fLine, FileScanner.Text())
        splitline := strings.SplitAfterN(fLine, "12345", 2)
        fmt.Println("Splited string = ", splitline[1])
    }
}

我期望下面的行拆分传递的参数(fLine) splitline:= strings.SplitAfterN(fread,“ 12345”,2)

2 个答案:

答案 0 :(得分:1)

您读取的(最后)行不是fLine,而是所有行的一部分。最后一行由FileScanner.Text()返回。如果要分割最后一行,可以将其存储在变量中,也可以使用切片的最后一个元素。

如果您选择将其存储在变量中:

line := FileScanner.Text()
fLine = append(fLine, line)
splitline  := strings.SplitAfterN(line, "12345", 2)

如果您只想使用最后一个slice元素:

fLine = append(fLine, FileScanner.Text())
splitline  := strings.SplitAfterN(fLine[len(fLine)-1], "12345", 2)

答案 1 :(得分:0)

所以您只想将切片转换为字符串,对吧?

这应该可以满足您的需求。

所以:

splitline := strings.SplitAfterN(strings.Join(fLine," "), "12345", 2)