2016-04-07 14 views
0

Buraya java'da çok yeniyim, lütfen bana katılın.Bir txt dosyasında sözcükleri sayan sözcük sayımı işlevi

Şu anda aşağıdaki olmadığını kodu oluşturmak için çalışıyorum:

  1. her kelime dosyasında görünür sayısını sayar processFile işlevine kodu ekleyin.

  2. En sık kullanılan sözcüğü bulmak için HashMap numaranızdan geçen processFile işlevinize kod ekleyin. Döngününüzden sonra, # 1 bonus gereksinimi için eklenen değişken en sık kullanılan kelime için değer içermelidir.

Şimdiye kadar bununla başa çıktım ve kimsenin ilerlememde yardım edip edemeyeceğini merak ediyordum.

 Map<String, Integer> freq = new Hashmap<String, Integer>(); 
     FileInputStream fi = new FileInputStream("readwords,txt"); 
     Scanner input = new Scanner(fi); 
     while (input.hasNext()) { 
     String word = input.next().toLowerCase(); 
     Integer f = freq.get(word); 
      if (f == null) { 
       freq.put(word,1); 
      } 
      else { 
       freq.put(word,f+1); 
      } 
     } 

+2

Bir soru sormadan önce, yayınlamak üzere olduğunuz kodun derleme sorunu olmadığından emin olun. –

+0

Teşekkür ederim! – fijilemon12

cevap

0

Kişisel sözdizimi yakındır teşekkür ederiz, ancak genel tür eksik, String beyan stilleri karışık ettik > ve değişken adları tutarsız. Ben

Map<String, Integer> map = new HashMap<>(); 
File file = new File("readwords.txt"); 
try (Scanner input = new Scanner(file)) { 
    while (input.hasNext()) { 
     String word = input.next().toLowerCase(); 
     Integer f = map.get(word); 
     if (f == null) { 
      map.put(word, 1); 
     } else { 
      map.put(word, f + 1); 
     } 
    } 
} catch (FileNotFoundException fnfe) { 
    fnfe.printStackTrace(); 
} 
0

kelime sayılması için ve bu deneyebilirsiniz en sık kullanılan kelime almak için, gibi bir şey istediğini düşünüyorum: Ben zaten yayınlanmıştır kodunu değiştirmiş yana

public void processFile() throws Exception { 
     Map<String, Integer> freq = new HashMap<>(); 
     FileInputStream fi = new FileInputStream("readwords.txt"); 
     String mostFreqWord = null; 
     Integer highestFreq = 0; 
     Scanner input = new Scanner(fi); 
     while (input.hasNext()) { 
      String word = input.next().toLowerCase(); 
      Integer f = freq.get(word) == null ? 1 : freq.get(word) + 1; 

      freq.put(word, f); 

      if(f > highestFreq) { 
       mostFreqWord = word; // set most frequent word 
       highestFreq = f;  // frequency of most frequent word 
      } 

     } 

     System.out.println("Word :" + mostFreqWord 
       + " is the most frequent word with frequency:" + highestFreq); 
    } 

, burada Yaptığım değişikliklerin açıklaması (orijinal kodunuzun ne yaptığını zaten biliyorsunuz).

İç döngüde, aşağıdaki satır, word kelimesinin ilk kez döngüde olup olmadığını kontrol eder, eğer evet ise, frekansı 1 olarak ayarlar, aksi halde bu sözcük için sıklığı artırır. freq.put(word, f);

Beyanı if(f > highestFreq) denetler değil sonra highestFreq ve mostFreqWord kelime günceller eğer yüksek frekans, hala yüksek ise:

Integer f = freq.get(word) == null ? 1 : freq.get(word) + 1; 

Sonra kelime için son frekansını ayarlar.

+0

"String mostfreqword - req.put (word, f)" sözdizimini anlamıyorum, ben metni okumanın tarayıcıyı uygulayacağını anlıyorum. Yardımınız için teşekkür ederiz! – fijilemon12

+0

Ben sadece orijinal kodda değiştirdiğimi güncelledim. –

+0

Integer f = freq.get (word) == null? 1: freq.get için başka bir sözdizimi var. word) + 1; veya bu tek yolu nedir? – fijilemon12

İlgili konular