douzhi6160 2016-07-26 10:30
浏览 155
已采纳

golang扫描器读取直到读取器结尾

I have a bufio scanner on a StringReader. After I reach a certain line on the Scanner output, I want to read until the end of the reader. Is there any way to achieve this using a simpler way, other than the commented code ?

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 += "
"
        // }
        break
    }
}

log.Println(beyond5)
  • 写回答

2条回答

  • dongmou5628 2016-07-26 12:02
    关注

    It seems such an operation is not possible at all with the scanner. We need to use the bufio reader only. The code is:

    s := `1
    2
    3
    4
    5
    6
    7`
    
    beyond5 := ""
    r := strings.NewReader(s)
    reader := bufio.NewReader(r)
    for {
        line, err := reader.ReadString('
    ')
        if err != nil {
            log.Fatal(err)
        }
        if strings.Contains(line, "5") {
            b, _ := ioutil.ReadAll(reader)
            beyond5 = string(b)
            break
        }
    }
    
    log.Println(beyond5)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大