• Go bufio库


    bufio.Scanner

    bufio使处理输入和输出方便又高效。Scanner类型是该包最有用的特性之一,它读取输入并将其拆成行或单词;通常是处理行形式的输入最简单的方法。该变量从程序的标准输入中读取内容。每次调用input.Scanner,即读入下一行,并移除行末的换行符;读取的内容可以调用input.Text()得到。Scan函数在读到一行时返回true,在无输入时返回false

    使用DEMO:

    func main(){
        scanner:=bufio.NewScanner(
            strings.NewReader("ABCDEFG
    HIJKELM"),
        )
        for scanner.Scan(){
            fmt.Println(scanner.Text()) // scanner.Bytes()
        }
    }

    理解:对于Scanner.Scan方法,相当于其他语言的迭代器iterator,并把迭代器指向的数据存放到新的缓冲区里。新的缓冲区(token)可以通过scanner.Text()或者scanner.Bytes()获取到。

    Scanner.Scan方法默认是以换行符 ,作为分隔符。如果你想指定分隔符,Go语言提供了四种方法,ScanBytes(返回单个字节作为一个 token), ScanLines(返回一行文本), ScanRunes(返回单个 UTF-8 编码的 rune 作为一个 token)和ScanWords(返回通过“空格”分词的单词)。 使用方式:

    func main(){
        scanner:=bufio.NewScanner(
            strings.NewReader("ABCDEFG
    HIJKELM"),
        )
        scanner.Split(ScanWords/*四种方式之一,你也可以自定义, 实现SplitFunc方法*/)
        for scanner.Scan(){
            fmt.Println(scanner.Text()) // scanner.Bytes()
        }
    }

    结论:我们一般在读取数据到缓冲区时,且想要采用分隔符分隔数据流时,我们一般使用bufio.Scanner数据结构,而不使用bufio.Reader

    NewScanner 和 NewReader 读取文件内容

     newScanner读取文件

    func printFile(filename string) {
        file, err := os.Open(filename)
        if err != nil {
            panic(err)
        }
        defer file.Close()
        scanner := bufio.NewScanner(file)
        for scanner.Scan() {
            fmt.Println("scanner", scanner.Text())
        }
    }

     newReader读取文件

    func printFile (filename string) {
        file, err := os.Open(filename)
        defer file.Close()
        if err != nil {
            panic(err)
        } 
        reader := bufio.NewReader(file)
        for {
            line, _, err := reader.ReadLine()
            if err != nil || err == io.EOF  {
                break
            } else {
                fmt.Printf("the line content is : %s
    ", line)
            }
        }
    }
  • 相关阅读:
    2015年校园招聘之腾讯(数据挖掘)笔试面试题目
    VBoxGuestAdditions.iso下载地址
    软件測试自学指南---从入门到精通
    C语言指针的初始化和赋值
    使用Jquery+EasyUI 进行框架项目开发案例解说之二---用户管理源代码分享
    完美攻略心得之圣魔大战3(Castle Fantisia)艾伦希亚战记(艾伦西亚战记)包含重做版(即新艾伦希亚战记)
    DatabaseMetaData的用法(转)
    Thread-safety with regular expressions in Java
    大象,大象
    使用 Java 实现 Comet 风格的 Web 应用
  • 原文地址:https://www.cnblogs.com/vincenshen/p/9245502.html
Copyright © 2020-2023  润新知