4

コードのロジックの次のステップで問題が発生しています。基本的に、ファイルの各行を調べて同じ行の連続するトークンを探し、重複するトークンを連続して発生する回数とともに出力することになっています。繰り返されないトークンは印刷されません。これがサンプルファイルです

/*
 * sometext.txt
 * hello how how are you you you you
I I I am Jack's Jack's 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
 */

これが私が書いたコードです。

package chapter6;
import java.util.*;
import java.io.*;
public class OutputDuplicates {
    public static void main (String[] args) throws FileNotFoundException {
        for (;;) {
            Scanner scan = new Scanner(System.in);
            prompt(scan);
        }
    }
    public static void prompt(Scanner scan) throws FileNotFoundException {
        System.out.println("What is the name of the file?");
        String name = scan.next();
        File inputFile = new File(name);
        if (inputFile.exists()) {
            Scanner read = new Scanner(inputFile);
            while (read.hasNext()) {
                String line = read.nextLine();
                Scanner oneLine = new Scanner (line);
                while (oneLine.hasNext()) {
                    String word = oneLine.next();
                    System.out.println(word);
                }
            }
        } else if (!inputFile.exists()) {
            prompt(scan);
        }
    }
}

ここからのロジックへの洞察は大歓迎です。

4

3 に答える 3

1

擬似コード:

for each line in the file
{
 lastword = ""
 numtimes = 1
 for each word in the line
 {
  if word == lastword
  {
   numtimes++
  }
  else
  {
   if numtimes > 1
   {
    print (/*print lastword and numtimes here*/)
   }
   lastword = word
   numtimes = 1
  }
 }
}
于 2013-01-22T01:29:14.017 に答える
1

ここであなたは相棒に行きます、それはあなたのために働くはずです

public Map<String, Long> scan(File file) throws Exception {

        Map<String, Long> map = new HashMap<>();
        Scanner read = new Scanner(file);
        while (read.hasNext()) {
            String line = read.nextLine();
            if(map.containsKey(line)) {
                map.put(line, map.get(line).longValue() + 1);
            } else {
                map.put(line, 1L);
            }
        }
        
        return map;
}
于 2013-01-22T03:42:40.650 に答える
0

シンボル度数分布表を作成します。

Map<String, Integer> symbolFrequencies = new HashMap<String, int>();

次に、シンボルごとに、次のようにします。

Integer countForSymbol = symbolFrequencies.get(symbol);
if (countForSymbol==null){
    symbolFrequencies.put(symbol, 1);
} else {
    countForSymbol = new Integer(countForSymbol.intValue + 1);
}

以上です。これで、解析したすべてのシンボルのカウントが得られます。

于 2013-01-22T01:29:41.590 に答える