package main import ( "bufio" "fmt" "io" "log" "os" ) type Count struct { Strcount int Numcount int Other int China int } func main() { filename := "./abc.txt" file, err := os.Open(filename) if err != nil { log.Fatal(err) } var c Count //返回带缓冲的reader readre := bufio.NewReader(file) for { //// ReadString读取,直到输入中第一次出现delim, //返回一个字符串,该字符串包含分隔符之前的数据,并包含分隔符。 //如果ReadString在找到分隔符之前遇到错误, //它返回在错误之前读取的数据和错误本身(通常是io.EOF)。 // ReadString返回err != nil,当且仅当返回的数据没有结束 // delim 意思就是分割 str, err := readre.ReadString(' ') //开始遍历读取的str数据 str底层是byte字节数组 //我们要判断是不是中文 所以这里转成 rune UTF-8编码 大于255肯定是中文 for _, v := range []rune(str) { switch { case v >= 'a' && v <= 'z': fallthrough case v >= 'A' && v <= 'Z': c.Strcount++ case v >= '0' && v <= '9': c.Numcount++ case v > 255: c.China++ default: c.Other++ } } //文件读取结束 跳出循环 if err == io.EOF { break } if err != nil { log.Fatal(err) } } fmt.Println("c.Numcoun=", c.Numcount) fmt.Println("c.Strcount=", c.Strcount) fmt.Println("c.China=", c.China) fmt.Println("c.Other=", c.Other) }