-1

一連の行を含む入力ファイルの Scanner をパラメーターとして受け入れる printDuplicates という名前の静的メソッドを記述します。メソッドは、各行を調べて、同じ行に同じトークンが連続して出現するかどうかを調べ、重複した各トークンを連続して出現する回数とともに出力する必要があります。非反復トークンは印刷されません。この問題では、複数行にわたる反復 (行が特定のトークンで終わり、次の行が同じトークンで始まる場合など) は考慮されません。

たとえば、入力ファイルに次のテキストが含まれているとします (重複したトークンのシーケンスには強調のために下線が引かれています)。

hello how how are you you you you
I I I am Jack's Jack's smirking smirking smirking smirking smirking revenge
bow wow wow yippee yippee
yo yippee
yippee yay yay yay
one fish two fish red fish blue fish
It's the Muppet Show, wakka wakka wakka

メソッドは、前の入力ファイルに対して次の出力を生成します。

how*2 you*4
I*3 Jack's*2 smirking*5
wow*2 yippee*2 yippee*2 yay*3

wakka*3

私が現在Javaで持っているコードは次のとおりですが、うまくいかず、なぜだろうと思っていました。誰かがそれを助けることができれば、ありがとう:)

import java.io.*;
import java.util.*;
public class What {
    public static void main(String[] args) throws Exception {
        String word = "";
        String word2 = "";
        Scanner input = new Scanner(new File("what.txt"));
        while(input.hasNextLine()) {
            Scanner line = new Scanner(input.nextLine());
            int repeat = 1;
            word = line.next();
            while(line.hasNext()) {
                word2 = line.next();
                while(word.equals(word2) && line.hasNext()) {
                    word = word2; 
                    word2 = line.next();
                    repeat++;
                }
                if(repeat!=1) {
                    System.out.print(word + "*" + repeat + " ");
                }
                word = word2;
            }
            System.out.println();
        }
    }
}

what.txt には以下が含まれます。

hello how how are you you you you
I I I am Jack's Jack's smirking smirking smirking smirking smirking revenge
bow wow wow yippee yippee
yo yippee
yippee yay yay yay
one fish two fish red fish blue fish
It's the Muppet Show, wakka wakka wakka

現在の出力は次のとおりです。

how*2 are*2 you*4
I*3 am*3 jack's*4 smirking*7
wow*2 yippee*3 yo*3 yippee*4 yay*5

wakka*2 
4

1 に答える 1

0

Try this:

while(line.hasNext()) {
    word2 = line.next();
    while(word.equals(word2)) {
        repeat++;
        if(line.hasNext()){
            word2 = line.next();
        } else {
            break;
        }
    }
    if(repeat!=1) {
        System.out.print(word + "*" + repeat + " ");
    }
    repeat = 1;
    word = word2;
}
于 2012-12-17T04:54:34.527 に答える