0

ファイル内の行数を数えて、トークンに分割したいと思います。コードが機能していないようです。誰かアドバイスをお願いします。前もって感謝します

import java.util.*;
import java.io.*;

public class kup
{
    public static void main(String args[]) throws Exception
    {
        FileReader fileInput = new FileReader("C:\\save\\input.txt");
        BufferedReader readInput = new BufferedReader(fileInput);

        FileWriter fileOutput = new FileWriter("C:\\save\\output.txt");
        PrintWriter outFile = new PrintWriter(fileOutput);

        Scanner scanLine = new Scanner(readInput);
        String textInput = scanLine.nextLine();
        StringTokenizer stringtokenizer = new StringTokenizer(textInput);

        int tokenCount = stringtokenizer.countTokens();
        int lineCount = 0;

        while(scanLine.hasNextLine())
        {
            while(stringtokenizer.hasMoreTokens())
            {
                String string = stringtokenizer.nextToken();
                outFile.println(string);
            }
                lineCount++;
        }

        outFile.println("Number of words: " +tokenCount);
        outFile.println("Number of lines: " +lineCount);

        readInput.close();
        outFile.close();
    }

}
4

1 に答える 1

5

最初の行でトークナイザーを初期化するだけです。次のようなものが必要だと思います:

int tokenCount = 0;
int lineCount = 0;

while (scanLine.hasNextLine())
{
    String line = scanLine.nextLine();
    StringTokenizer tokenizer = new StringTokenizer(line);

    while (tokenizer.hasMoreTokens())
    {
        String string = tokenizer.nextToken();
        outFile.println(string);
        tokenCount++;
    }
}

個人的には、おそらく「1BufferedReader行ずつ読む」ことに固執するでしょう-あなたはここの詳細を実際には使用していませんScanner. そう:

String line;
while ((line = readInput.readLine()) != null)
{
    StringTokenizer tokenizer = new StringTokenizer(line);

    while (tokenizer.hasMoreTokens())
    {
        String string = tokenizer.nextToken();
        outFile.println(string);
        tokenCount++;
    }
}

リーダー/ライター/ストリームの finally ブロックも閉じるか、Java 7 を使用している場合は try-with-resources ステートメントを使用する必要があることに注意してください。

于 2012-06-23T09:43:11.487 に答える