2017-04-25 13 views
0

外部ファイルから情報を読み込み、画面にさまざまな統計情報を表示しようとしています。私は、行と段落の量をうまく追跡することができましたが、単語の総量を見つけようとすると問題に遭遇しました。入力ファイルから単語の数を調べようとしています

私は2番目のwhileループをとり、それを最初に置くと、それは正しい単語の量を与えるが間違った行と段落を与えていることに気がつきましたが、今のところそれを実行すると、段落は間違った言葉です。

私は本当にこれがなぜそうであるかを理解するのにあなたの助けに感謝します。ありがとうございました!

int x = 0, words = 0, y = 0; 
System.out.print("Name of the input file: "); 
in = kbd.nextLine().toLowerCase(); 
System.out.println(" "); 

// Set up connection to the input file 
Scanner input = new Scanner(new FileReader(in)); 

// Set up connection to an output file 
PrintWriter output = new PrintWriter(new FileOutputStream("datacopy.txt")); 
int lineNum = 0; 

while (input.hasNextLine()) { 

    String line; 
    line = input.nextLine(); 

    if (line.length() == 0) { 
     x++; 
    } 
    output.println(line + "\n"); 
    lineNum++; 

} 
while (input.hasNext()) { 
    String line = input.next(); 
    words++; 
} 

System.out.println("Words: " + words); 
System.out.println("Lines: " + lineNum); 
System.out.println("Paragraphs " + --x); 
System.out.println(" "); 
System.out.println("Output file datacopy.txt created."); 

答えて

2

をあなたは各ループであなたのinputを再初期化する必要があります。

Scanner input = new Scanner(new FileReader(in)); 

//loop1 

input = new Scanner(new FileReader(in));//re-initialize it again 

//loop2 

2番目のループでは、ループは最初から開始されないため、最初のループの終点から開始します。

+1

を処理するより効率的な方法です。ありがとうございました! – s24569

+0

@ s24569この解決策は間違いなく機能しますが、ファイルを2回読み込みます。これにより作業量が倍になり、特にリモートドライブに配置されている場合は、大容量のファイルに対して非常に非効率的になります。 – dasblinkenlight

1

問題は、以下の両方のループは、ファイルの先頭に位置するようにinputを必要とすることである:

while (input.hasNextLine()) // count lines 

while(input.hasNext()) // count words 

ファイルを「巻き戻し」と最初から開始することも可能ですが、そうではありません最適な。ファイルを1行ずつ読み、読みながら数を数えればいいです。 while (input.hasNextLine())ループからline変数を使用して

、個々の単語に分割し、実行中の合計にその数を追加します。

while (input.hasNextLine()) { 
    String line = input.nextLine(); 
    output.println(line + "\n"); 
    lineNum++; 
    if(line.length() == 0){ 
     x++; 
     continue; 
    } 
    words += line.split("\\s+").length; 
} 
+1

これは、入力ファイル – WOUNDEDStevenJones

関連する問題