计算文本文件中的字符数

时间:2011-07-26 14:49:37

标签: java string

我目前有以下代码:

public class Count {

    public static void countChar() throws FileNotFoundException {
        Scanner scannerFile = null;

        try {
            scannerFile = new Scanner(new File("file"));
        } catch (FileNotFoundException e) {
        }

        int starNumber = 0; // number of *'s

        while (scannerFile.hasNext()) {
            String character = scannerFile.next();
            int index =0;
            char star = '*';
            while(index<character.length()) {

                if(character.charAt(index)==star){
                    starNumber++;
                }
                index++;
            }
            System.out.println(starNumber);
        }
    }

我试图找出文本文件中出现*的次数。例如,给定一个包含的文本文件  嗨*我的名字*

该方法应以3

返回

目前发生的情况是上面的例子,该方法将返回:

0 1 1 2 2 3

提前致谢。

4 个答案:

答案 0 :(得分:3)

使用Apache commons-io将文件读入字符串

String org.apache.commons.io.FileUtils.readFileToString(File file);

然后,使用Apache commons-lang来计算*的匹配:

int org.apache.commons.lang.StringUtils.countMatches(String str, String sub)

结果:

int count = StringUtils.countMatches(FileUtils.readFileToString(file), "*");

答案 1 :(得分:2)

int countStars(String fileName) throws IOException {
    FileReader fileReader = new FileReader(fileName);
    char[] cbuf = new char[1];
    int n = 0;

    while(fileReader.read(cbuf)) {
        if(cbuf[0] == '*') {
            n++;
        }
    }
    fileReader.close();
    return n;
}

答案 2 :(得分:2)

除了每行打印计数外,方法中的所有内容都可以正常工作:

    while (scannerFile.hasNext()) {
        String character = scannerFile.next();
        int index =0;
        char star = '*';
        while(index<character.length()) {

            if(character.charAt(index)==star){
                starNumber++;
            }
            index++;
        }
        /* PRINTS the result for each line!!! */
        System.out.println(starNumber);
    }

答案 3 :(得分:0)

此时我会坚持使用Java库,然后在您熟悉核心Java API时使用其他库(例如公共库)。这是我的头脑,可能需要调整才能运行。

StringBuilder sb = new StringBuilder();
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);

String s = br.readLine();
while (s != null)
{
  sb.append(s);
  s = br.readLine();
}
br.close(); // this closes the underlying reader so no need for fr.close()

String fileAsStr = sb.toString();
int count = 0;
int idx = fileAsStr('*')
while (idx > -1)
{
  count++;
  idx = fileAsStr('*', idx+1);
}