0

ファイルの行数、文字数、単語数をカウントする次のコードを作成しました。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 を比較できないことはわかっています。このコードに他の方法はありますか?

4

1 に答える 1

2

まず、 - から実際に読み取る必要がありますが、BufferedReader上記のように、これさえ持っていることを本当に無視しています。の代わりにfile.read()、する必要がありますbr.read()

現在のアプローチですでに観察されている可能性がある問題の一部は、fileをアタッチした後、から直接読み取るときに文字が欠落している可能性があることですBufferedReader。はBufferedReader、ストリームから文字を事前に読み取ってバッファを埋めることができます。そのため、ストリームから直接読み取るfileと、それらの文字が失われます。

次に、あなたは正しいです。文字と文字列を比較することはできません-文字と比較してください:

if((char)i == ('\t'))
  countw++;
else if((char)i == '\n')
  countl++;

これらの問題を片付けたら、他にも問題が見つかると思いますが、これで十分に作業を開始できることを願っています。(たとえば、単語は本当にタブ文字で区切られていますか? または、スペースなどを探したいですか?)

于 2013-02-24T19:38:16.240 に答える