编写Java程序:从文本文件返回含行数、单词数、字符数的int数组
解决方案:逐字符读取文件并统计行/单词/字符数
没问题,我来帮你实现这个需求——用read()逐字符读取文本文件,同时严格按照你的定义统计行数、单词数和字符数。下面是完整的Python实现:
def count_file_stats(file_path): char_count = 0 line_count = 0 word_count = 0 prev_char_is_whitespace = True # 初始状态:假设前一个是空白,处理第一个字符是单词的情况 try: with open(file_path, 'r', encoding='utf-8') as file: # 用read()读取整个文件内容 content = file.read() for char in content: # 统计字符数:所有字符都算 char_count += 1 # 统计行数:遇到换行符就加1 if char == '\n': line_count += 1 # 统计单词数:当前字符非空白,且前一个字符是空白 current_is_whitespace = char.isspace() if not current_is_whitespace and prev_char_is_whitespace: word_count += 1 # 更新前一个字符的空白状态 prev_char_is_whitespace = current_is_whitespace # 补全最后一行:如果文件非空且最后没有换行符,行数+1 if char_count > 0 and content[-1] != '\n': line_count += 1 return char_count, line_count, word_count except FileNotFoundError: print(f"错误:文件 {file_path} 不存在") return None, None, None # 使用示例 if __name__ == "__main__": chars, lines, words = count_file_stats("example.txt") if chars is not None: print(f"字符数:{chars}") print(f"行数:{lines}") print(f"单词数:{words}")
关键逻辑拆解
- 字符数统计:每读取一个字符直接累加,包含空格、换行、制表符等所有空白字符,完全匹配你的定义。
- 行数统计:每遇到
'\n'就计数+1,最后额外判断文件非空且末尾无换行的情况,补全行数——毕竟很多文本的最后一行不会带换行符,得把它算作有效行。 - 单词数统计:用
prev_char_is_whitespace跟踪前一个字符的状态,当当前字符非空白且前一个字符是空白时,判定为新单词的开头,单词数+1。这个逻辑能处理:- 文本开头就是单词的场景(初始状态设为空白)
- 多个连续空白字符的场景(不会重复计数)
- 任意空白分隔单词的场景(空格、换行、制表符都生效)
边界情况覆盖
- 空文件:三个统计值均为0
- 全空白字符文件:字符数等于空白总数,行数按换行符计数(最后补全),单词数为0
- 单行文无换行:行数会正确统计为1
内容的提问来源于stack exchange,提问作者PlayEmOdds
相关产品推荐
相关产品推荐

