0

はい、これは「Javaプログラムの構築」の演習ですが、割り当てられた問題ではありません。

次のテキストを入力として読み取るメソッドを作成する必要があります。

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*4
wow*2 yippee*2 yippee*2 yay*3

wakka*3

これで、Scannerオブジェクトを使用して、最初に行を文字列に読み込み、文字列をトークン化する必要があることがわかりました。トークンを文字列に読み込んで、すぐに次のトークンと比較する方法がわかりません。

CONSTRAINT->これは配列の前の章からのものなので、配列を使用せずに解決したいと思います。

これが私がこれまでに持っているコードです:

public class Exercises {

public static void main(String[] Args) throws FileNotFoundException {

  Scanner inputFile = new Scanner(new File("misc/duplicateLines.txt"));
  printDuplicates(inputFile);

}

public static void printDuplicates(Scanner input){

  while(input.hasNextLine()){

        //read each line of input into new String
        String lineOfWords = input.nextLine();
        //feed String into new scanner object to parse based on tokens
        Scanner newInput = new Scanner(lineOfWords);

        while(newInput.hasNext()){

            //read next token into String
            String firstWord = newInput.next();

            //some code to compare one token to another


        }
    }
}
4

3 に答える 3

1

配列を使用する必要はありません... while ループで少しだけ状態が必要です。

public class Exercises {

    public static void main(String[] Args) throws FileNotFoundException {

      // scanner splits on all whitespace characters by default, so it needs
      // to be configured with a different regex in order to preserve newlines
      Scanner inputFile = new Scanner(new File("misc/duplicateLines.txt"))
          .useDelimiter("[ \\t]");

      printDuplicates(inputFile);
    }

    public static void printDuplicates(Scanner input){

        int lastWordCount = 0;
        String lastWord = null;

        while(newInput.hasNext()){

            //read next token into String
            String nextWord = newInput.next();

            // reset counters on change and print out if count > 1
            if(!nextWord.equals(lastWord)) {
                if(lastWordCount > 1) {
                    System.out.println(lastWord + "*" + lastWordCount);
                }
                lastWordCount = 0;
            }

            lastWord = nextWord;
            lastWordCount++;
        }

        // print out last word if it was repeated
        if(lastWordCount > 1) {
            System.out.println(lastWord + "*" + lastWordCount);
        }
    }
}
于 2012-12-06T06:12:18.500 に答える
0

これはどう?前の単語を追跡するために、余分な文字列を割り当てています。

while(input.hasNextLine()){

    //read each line of input into new String
    String lineOfWords = input.nextLine();
    //feed String into new scanner object to parse based on tokens
    Scanner newInput = new Scanner(lineOfWords);

    String previousWord = "";
    String currentWord = "";
    while(newInput.hasNext()){

        //read next token into String
        previousWord = currentWord;
        currentWord = newInput.next();

        if (currentWord.equals(previousWord)) {
            // duplicate detected!
        }
    }
}
于 2012-12-06T06:10:11.647 に答える