【问题标题】:How to pass []string or []byte type to SplitAfterN in golang?如何在golang中将[]string或[]byte类型传递给SplitAfterN?
【发布时间】:2019-11-28 04:11:40
【问题描述】:

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

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

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

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)

【问题讨论】:

    标签: string file go


    【解决方案1】:

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

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

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

    如果你只想使用最后一个切片元素:

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

    【讨论】:

    • Thnx icza, 给定文件的内容 = abcdedfghijklmnopqrstuvwxyz1234567890 abcdedfghijklmnopqrstuvwxyz1234567890 我正在尝试执行如下操作, 1. 逐行读取此文件内容并使用 fLine = append(fLine, FileScanner.Text()) 2. 一旦我得到第一行,我试图将行拆分为 2 部分并保存到另一个缓冲区中,2 部分使用下面的行 splitline := strings.SplitAfterN(fLine, "1234567890", 2)但是当我尝试传递读取的读取字符串变量 fLine 时,我尝试将此 fLine 输入字符串(fLine),但它仍然给出错误。
    • @Perry fLine 是一段字符串,您不能将其转换为 string 值。您在我提议的代码中看到任何string 转换吗?
    • 是的,我可以按照您提出的代码进行字符串转换。现在,问题是我无法将所有转换后的内容存储到单个字符串缓冲区中。我试过如下, line := FileScanner.Text() fLine = append(fLine, line) splitline := strings.SplitAfterN(line, "12345", 2) //将第二部分保存在新缓冲区 FinalStr := append(FinalStr, splitline[1]) 当我尝试打印这个 FinalStr 时,它有一个空字符串。
    【解决方案2】:

    所以你只是想将切片转换为字符串,对吗?

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

    所以:

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

    【讨论】:

      猜你喜欢
      • 2017-09-14
      • 2013-08-15
      • 2021-08-15
      • 2022-01-09
      • 1970-01-01
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      相关资源
      最近更新 更多