读入文件并统计以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();
        }
    }
}


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

(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();
            }
        }
    }
     

遇到啥问题了啊?扔个代码......
if(chars[i]==32&& chars[i]==65){ 你这条件,谁也无法满足的啊,同时要等于32和65啊?
应该判断前面一个是空格,后面一个是字符的情况吧

 for (int i = 0; i < chars.length-1; i++) {
                if(chars[i]==32&& ((chars[i+1] >='A' && chars[i+1]<='Z') || (chars[i+1] >='a' && chars[i+1]<='z') ){
                    count++;
                }
            }

计算26个字母开头的单词数,就不用循环判断了。又不是统计字符数。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class demo{
    public static void main(String[]args) {
    }

    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();
                //循环判断每一行中的个数
                    if((chars[0]>='a'|| chars[0]<='z') || (chars[0]>='A'|| chars[0]<='Z')){
                        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();
            }
        }
    }
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632