代码
// 统计文件中英文、数字、空格和其它字符的数量package mainimport ( "bufio" "fmt" "io" "os")// 定义一个结构体,保存统计的字符以及数量type CharCount struct { EnCount int NumCount int SpaceCount int OtherCount int}func main() { // 思路: // 打开一个文件,创建一个 Reader // 每读取一行,就去统计不同的字符数量,将结构保存到结构体中 // 定义 CharCount 实例 charCount := CharCount{} filepath := "d:/test.txt" file, err := os.Open(filepath) var reader *bufio.Reader if err != nil { fmt.Printf("读取文件:%v 失败", filepath) } else { // 创建带缓存的 *reader reader = bufio.NewReader(file) // 循环读取内容 for { // 读到一个换行就结束 str, err := reader.ReadString('\n') if err == io.EOF { // 读到文件末尾就退出 break } // str2 := []rune(str) // 处理中文字符 for _, v := range str { // fmt.Printf("%c", v) // 查看字符 switch { case v >= 'a' && v <= 'z': fallthrough // 穿透 case v >= 'A' && v <= 'Z': charCount.EnCount++ case v == ' ' || v == '\t': charCount.SpaceCount++ case v >= '0' && v <= '9': charCount.NumCount++ default: charCount.OtherCount++ } } // 输出内容 fmt.Print(str) } fmt.Println("文件读取结束") // 输出统计的结果 fmt.Printf("英文个数:%v, 数字个数:%v, 空格个数:%v, 其它字符个数:%v \n", charCount.EnCount, charCount.NumCount, charCount.SpaceCount, charCount.OtherCount) } // 关闭文件 defer func() { err = file.Close() if err != nil { fmt.Println("关闭文件错误") } else { fmt.Printf("文件: %v 已关闭", filepath) } }()}