Golang实现文本内容统计
数字、字母(大小写)
package main
import (
"os"
"fmt"
"bufio"
"io"
)
/**
统计一个文件的内含有的数字,英文,空格及其其他字符数量
*/
type WordCount struct {
ChCount int //记录英文个数
NumCount int//记录数字个数
SpaceCount int //记录空格的个数
OtherCount int // 记录其他字符的个数
CharCount int
}
func main() {
// 思路 : 打开一个文件,创一个Reader 读取每一行,
// 就去统计有多少个,英文,数字空格和字符,
// 然后将结果保存到结构体内
srcfileName := "C:/Users/Administrator/Desktop/abc.txt"
srcFile,err:=os.Open(srcfileName)
if err !=nil{
fmt.Printf("srcFile Open err=%v",err)
}
defer srcFile.Close()
// 定义个CharCount 实例
var wc WordCount
wc.CharCount = 0
// 创建一个Reader
srcReader :=bufio.NewReader(srcFile)
// 开始循环的读取srcFile的内容
for {
str,err:=srcReader.ReadString('\n')// 测试还有BUG 最后一行未换行则最后一行的所有内容不统计
if err == io.EOF { // 读取到文件末尾就退出
break
}
// 为了兼容中文字符,可以将str转成[]rune
strSlice := [] rune (str)
for _,v := range strSlice {
switch {
case v>='a' && v <='z':
fallthrough // 穿透 包涵小写字符
case v>='A' && v <='Z':
wc.ChCount ++
case v==' ' || v == '\t':
wc.SpaceCount++
case v>='0' && v<='9':
wc.NumCount++
default:
wc.OtherCount++//是 汉字和空格 数字之和
}
}
}
fmt.Printf("字符的个数为=%v,数字的个数为=%v,空格的个数为=%v,其他字符的个数为=%v",
wc.ChCount,wc.NumCount,wc.SpaceCount,wc.OtherCount)
}