bufio.Scanner

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

使用DEMO:

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

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

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

func main(){
scanner:=bufio.NewScanner(
strings.NewReader("ABCDEFG\nHIJKELM"),
)
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\n", line)
}
}
}

最新文章

  1. iOS学习之Table View的简单使用
  2. 【Python3】SMTP发送邮件
  3. hdu4639Hehe
  4. PHPCMS标签:PC标签模板语法规则
  5. ESCAPE用法
  6. iOS 之 WebView 简单使用
  7. PHP的性能优化方法总结
  8. ubuntu 装机必备
  9. webstorm主要快捷键
  10. mysql主从脚本
  11. appium+java(四)微信公众号自动化测试实践
  12. 各种initcall的执行先后顺序(module_init、postcore_initcall、arch_initcall、subsys_initcall、 fs_initcall)【转】
  13. [转]mysqldump备份还原和mysqldump导入导出语句大全详解
  14. BI Admin Tools和目录管理器的连接配置
  15. 使用 urllib 分析 Robots 协议
  16. UI 交互
  17. Imageview如何设置背景颜色
  18. Linux 下 SSH 远程超时解决方案
  19. linux 下库的深入调研
  20. nodeJS学习(5) --- sublime Text3 安装使用

热门文章

  1. java 接口转码、加密
  2. C++中计算矩阵的行列式
  3. poj 1515+poj 1438(边双连通)
  4. "围观"设计模式(7)--创建型之单例模式(Singleton Pattern)
  5. java随手记
  6. 清空javascript数组数据
  7. 七、Dockerfile案例一(jdk1.8安装)
  8. jquery,日常 记录知识 点 (选择器的引用类型)
  9. 巨蟒django之CRM3 添加和编辑客户&&公户和私户的展示和转换
  10. QChart 如何放大缩小?