You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:25:29