подсчитать количество вхождений из карты с использованием текстового файла - PullRequest
3 голосов
/ 06 декабря 2010

Код ниже будет подсчитывать вхождения каждого персонажа. Если у меня есть abc в текстовом файле, то вывод будет 1 b 1 c 1. Я читал на многих сайтах, что цикл for займет много времени, и лучше реализовать то же самое, используя хэш-карту. Может ли кто-нибудь из вас помочь мне преобразовать эту программу, реализующую хэш-карту?

 import java.io.*;

    class Count_Char {
    public static void main(String[] args) {
        try
        {
    FileInputStream file = new FileInputStream("D:\\trial.txt");
    DataInputStream dis = new DataInputStream(file);
    BufferedReader br = new BufferedReader(new InputStreamReader(dis));
    String Contents="";
    String str="";
    while ((Contents = br.readLine()) != null) {
    str+=Contents;
    }
    char[]char_array =str.toCharArray();
    for(int count =0;count<char_array.length;count++){
    char ch= char_array[count];
    int counter=0;
    for ( int i=0; i<char_array.length; i++){
    if (ch==char_array[i])
    counter++;
    }
    boolean flag=false;
    int j=count-1;
    while(j>=0)
        {

        if(ch==char_array[j])
            flag=true;
            j--;
        }
    if(!flag){
    System.out.println(ch+" "+counter);
    }
    }
        }catch(IOException e1){
            System.out.println(e1);
        }
        }
    }

Ответы [ 2 ]

2 голосов
/ 06 декабря 2010

Быстрый псевдокод. По сути, уловка заключается в том, что вы сохраняете символы в качестве ключей на карте, а значение - это число вхождений для этого символа (пара ключ / значение).

 //declare a map to hold your characters and their counters
 Map<String,Integer> charCounter = new HashMap<String,Integer>();
 //the following if else logic goes when you are looping through your tokens
    if(charCounter.containsKey(<your character>)){
           charCounter.put(<your character>,charCounter.get(<your character>)+1);
    }else{
          charCounter.put(<your character>,1);
    }

После того, как вы закончите обход, вы можете напечатать карту таким образом.

for(String key : charCounter.keySet()) {
            System.out.println(key+" "+charCounter.get(key));
}
0 голосов
/ 06 декабря 2010

FileInputStream file = new FileInputStream ("");DataInputStream dis = new DataInputStream (file);BufferedReader br = new BufferedReader (new InputStreamReader (dis));

        String temp="";
        Map<String,Integer> charCounter = new HashMap<String,Integer>();
      while ((temp=br.readLine()) != null)
      {
         String[] spliter= temp.split("");
         for(String temp1:spliter)
         if(charCounter.containsKey(temp1)){
               charCounter.put(temp1,charCounter.get(temp1)+1);
        }else{
              charCounter.put(temp1,1);
        }


      }


            System.out.println(charCounter);

сборка на логике Coolbean дал Hav Writn это .. Надеюсь, это поможет ... Я проверил это ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...