Ryan1342639992 2022-10-19 09:13 采纳率: 100%
浏览 40
已结题

读入文件并统计以26个字母开头的单词个数

如何用java读入并统计

文件中以26个字母开头单词的个数?

public void test() {
    FileReader fileReader = null;
    BufferedReader bufferedReader = null;
    int count = 0;
    try {
        //创建文件输入流
        fileReader = new FileReader("story.txt");
        //创建文件缓冲流
        bufferedReader = new BufferedReader(fileReader);
        String str;
        //定义count记录个数
        count[] = 0;
        //循环每次读取一行
        while ((str = bufferedReader.readLine()) != null){
            char[] chars = str.toCharArray();
            //循环判断每一行中的个数
            for (int i = 0; i < chars.length; i++) {
                if(chars[i]==32&& chars[i]==65){
                    count++;
                }
            }
        }
        System.out.println("数字一共有:" + count + "个");
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if(bufferedReader != null){
                bufferedReader.close();
            }
            if(fileReader != null){
                fileReader.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


运行结果及报错内容 还没能运行
我的解答思路和尝试过的方法
我想要达到的结果 输出统计值
  • 写回答

4条回答 默认 最新

  • 关注

    (1)count[] =0 改为 count = 0
    (2)每行判断单词个数的逻辑不对,我给你单独封装了一个函数,并添加了2个辅助函数,一个用来判断字符是否是26个英文字母,一个用来判断是否是单词分隔符,单词分隔符我按照逗号、空格、点、回车符、tab键,叹号、问号这几个来处理的,你可以根据你的需要自动调整,也可以只用空格符。
    运行结果:

    img

    代码(我把函数放在类里里,并在main函数中调用test()函数,你只提取需要的函数部分即可):

    public static boolean IsChar(char c){
            //判断字符是否是26个英文字母
            if( (c >='a' && c<='z') || (c>='A' && c<='Z') )
                return true;
            else
                return false;
        }
        
        public static boolean IsJudgeChar(char c){
            //判断是否是单词分隔符,这里用 空格,逗号,点,回车符,tab键,问号作为单词的分隔符,可根据实际情况调整,也可以只用空格作为单词分隔符
            if( c==',' || c=='.' || c==' ' || c=='\n' || c=='!' || c=='?' || c=='\t')
                return true;
            else
                return false;
        }
        
        public static int CaculateLine(String str){
            //统计每行中以26个字母开头的单词
            int count = 0;
            char[] chars = str.toCharArray();
            int i = 0;
            boolean flag = false;
            for(i=0;i<str.length();i++){
                if(flag == true){ //开始统计单词
                    if( IsChar(chars[i])  )
                        continue;
                    else if ( IsJudgeChar(chars[i]) ){
                        count++; //单词数+1
                        flag = false; //重新开始判断
                    }else{
                        //如果是其它字符,比如数字等等,说明不是纯单词,忽略,继续下次判断
                        flag = false;
                    }
                }else{
                    if(i==0 && IsChar(chars[i])) //第一个单词,并且第一个单词是26个英文字母之一
                        flag = true;
                    else if(i>0 && IsJudgeChar(chars[i-1]) && IsChar(chars[i])) //不是第一个单词,前一个字符是单词分隔符,且当前字符是26个字母之一
                        flag = true;
                }
                
                
            }
            
            //如果最后一个字符是26个英文字母,需要+1
            if( IsChar(chars[str.length()-1]) )
                count++;
            
            return count;
        }
        
        public static void test() {
            FileReader fileReader = null;
            BufferedReader bufferedReader = null;
            int count = 0;
            try {
                //创建文件输入流
                fileReader = new FileReader("story.txt");
                //创建文件缓冲流
                bufferedReader = new BufferedReader(fileReader);
                String str;
                //定义count记录个数
                count = 0;//修改 count[] = 0;
                //循环每次读取一行
                while ((str = bufferedReader.readLine()) != null){
                    count += CaculateLine(str);
                }
                System.out.println("数字一共有:" + count + "个");
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if(bufferedReader != null){
                        bufferedReader.close();
                    }
                    if(fileReader != null){
                        fileReader.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
         
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月3日
  • 已采纳回答 10月26日
  • 创建了问题 10月19日

悬赏问题

  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?