0

空白を除く文字数、単語数、行数をカウントする次のコードを作成しましたが、コードが適切な出力を表示していません。

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=br.read();
        if((char)i==(' '))
            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:"+countl);
    System.out.println("Number of characters:"+countc);
}
}

私のファイルsample.txtには

hi my name is john
hey whts up

そして私のアウトプットは

Number of words:6
Number of lines:2
Number of characters:26
4

4 に答える 4

3

繰り返しを含む他の空白文字も破棄する必要があります。split前後にある\\s+単語は、すべての空白文字だけでなく、これらの文字が連続して出現することによっても区切られます。

内のすべての単語のリストを取得するlineと、配列と の length メソッドを使用して、単語と文字の数を簡単に更新できますString

次のような結果が得られます。

String line = null;
String[] words = null;
while ((line = br.readLine()) != null) {
    countl++;
    words = line.split("\\s+");
    countw += words.length;
    for (String word : words) {
        countc += word.length();
    }
}
于 2013-02-24T20:17:23.437 に答える
0

これを試して:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class FileCount {
    /**
     *
     * @param filename
     * @return three-dimensional int array. Index 0 is number of lines
     * index 1 is number of words, index 2 is number of characters
     * (excluding newlines) 
     */
    public static int[] getStats(String filename) throws IOException {
        FileInputStream file = new FileInputStream(filename);
        BufferedReader br = new BufferedReader(new InputStreamReader(file));

        int[] stats = new int[3];
        String line;
        while ((line = br.readLine()) != null) {
            stats[0]++;
            stats[1] += line.split(" ").length;
            stats[2] += line.length();
        }

        return stats;
    }

    public static void main(String[] args) {
        int[] stats = new int[3];
        try {
            stats = getStats("sample.txt");
        } catch (IOException e) {
            System.err.println(e.toString());
        }
        System.out.println("Number of words:" + stats[1]);
        System.out.println("Number of lines:" + stats[0]);
        System.out.println("Number of characters:" + stats[2]);
    }

}
于 2013-02-24T20:23:49.730 に答える
0

改行は、単語が終了することも意味します。=> 各単語の後に常に ' ' があるとは限りません。

  do
  {
  i=br.read();
    if((char)i==(' '))
        countw++;
    else if((char)i==('\n')){
        countl++;
        countw++;  // new line means also end of word
    }
    else 
        countc++;
}while(i!=-1);

ファイルの終わりも単語の数を増やす必要があります (「\n」の「 」が最後の文字でない場合。また、単語間の複数のスペースの処理はまだ正しく処理されません。

=>これを処理するためのアプローチをさらに変更することを検討する必要があります。

于 2013-02-24T20:16:54.270 に答える
0
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 = br.read();
            if ((char) i == (' ')) { // You should also check for other delimiters, such as tabs, etc.
                countw++;
            }
            if ((char) i == ('\n')) { // This is for linux Windows should be different
                countw++; // Newlines also delimit words
                countl++;
            }  // Removed else. Newlines and spaces are also characters
            if (i != -1) {
                countc++; // Don't count EOF as character
            }


        } while (i != -1);


        System.out.println("Number of words " + countw);
        System.out.println("Number of lines " + countl); // Print lines instead of words
        System.out.println("Number of characters " + countc);
    }
}

出力:

Number of words 8
Number of lines 2
Number of characters 31

検証

$ wc sample.txt 
2  8 31 sample.txt
于 2013-02-24T20:20:19.670 に答える