使用缓冲读卡器时出错

时间:2013-02-24 19:35:17

标签: java

我编写了以下代码来计算文件中的行数,字符数和单词数。 我使用过BufferedReader。

import java.io.*;

class FileCount
 {


public static void main(String args[]) throws Exception
{
    FileInputStream file=new FileInputStream("sample.txt");
    BufferedReader br=new BufferedReader(new InputStreamReader(file));
    int i;
    int countw=0,countl=0,countc=0;
    do
    {
        i=file.read();
        if((char)i==("\t"))
            countw++;
        else if((char)i=="\n")
            countl++;
        else
            countc++;



    }while(i!=-1);
    System.out.println("Number of words"+countw);
    System.out.println("Number of lines"+countw);
    System.out.println("Number of characters"+countc);
}
}

问题是我必须只使用缓冲的阅读器。我知道我们无法比较我在代码中完成的char和String。 这段代码还有其他出路吗?

1 个答案:

答案 0 :(得分:2)

首先,你需要实际阅读BufferedReader - 但如上所述,你真的无视你甚至拥有它。而不是file.read(),您需要br.read()

您可能已经在当前方法中观察到的部分问题是,在将file附加到BufferedReader之后直接从BufferedReader阅读时,您可能会丢失字符。 file可以预先从流中读取字符以填充缓冲区 - 因此直接从if((char)i == ('\t')) countw++; else if((char)i == '\n') countl++; 读取将导致错过这些字符。

然后,你是对的,你不能比较字符和字符串 - 所以比较字符:

{{1}}

一旦你解决了这些问题,我希望你会发现其他问题 - 但希望这足以让你开始。 (例如,你的单词是否真的被制表符分隔 - 或者你想要寻找空格等?)