我在StringReader上有一个bufio扫描器。当我到达扫描仪输出的某一行后,我想阅读直到阅读器的末尾。除了注释的代码之外,还有什么方法可以使用更简单的方法实现此目的?

s := `1
2
3
4
5
6
7`

beyond5 := ""
scanner := bufio.NewScanner(strings.NewReader(s))
for scanner.Scan() {
    if strings.Contains(scanner.Text(), "5") {
        // Read all lines until EOF from scanner
        // and store in beyond5
        // for scanner.Scan() {
        //  beyond5 += scanner.Text()
        //  beyond5 += "\n"
        // }
        break
    }
}

log.Println(beyond5)

最佳答案

扫描仪似乎根本无法进行这样的操作。我们只需要使用bufio阅读器。代码是:

s := `1
2
3
4
5
6
7`

beyond5 := ""
r := strings.NewReader(s)
reader := bufio.NewReader(r)
for {
    line, err := reader.ReadString('\n')
    if err != nil {
        log.Fatal(err)
    }
    if strings.Contains(line, "5") {
        b, _ := ioutil.ReadAll(reader)
        beyond5 = string(b)
        break
    }
}

log.Println(beyond5)

关于string - golang扫描器读取直到读取器结尾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38587397/

10-10 19:55