2014-11-02 92 views
0

該程序支持統計每個單詞在.txt文件中出現的次數 我處於正確的軌道上,因爲此程序顯示文件中的每個單詞在文本區域,但我需要它不重複單詞並增加計數器。我是在正確的軌道下爲每個單詞:單詞聲明?我知道我在這個陳述中只需要更多的邏輯,但我不知道如何實現它。我應該補充一點,我正在使用orderedlinkedlists將所有單詞按字母順序放在文本區域中,以便它們或按照彼此相鄰的順序排列。計算單詞在txt文件中出現的次數Java

import javax.swing.*; 
import java.awt.*; 
import java.io.*; 
import java.util.Scanner; 


public class Oct29 extends JPanel 
{ 
    private OrderedList<String> words; 
    private String filename; 
    private int width = 800; 
    private int height = 600; 
    private TextArea textarea; 

    public Oct29() 
    { 
    Scanner scan; 
    textarea = new TextArea("",0,0,TextArea.SCROLLBARS_VERTICAL_ONLY); 
    textarea.setFont(new Font("Helvetica",Font.PLAIN,24)); 
    textarea.setPreferredSize(new Dimension(width,height)); 
    setPreferredSize(new Dimension(width,height)); 
    add(textarea); 
    JFileChooser chooser = new JFileChooser("../Text"); 
    int returnvalue = chooser.showOpenDialog(null); 

    if(returnvalue == JFileChooser.APPROVE_OPTION) 
    { 
     try 
     { 
     File file = chooser.getSelectedFile(); 
     filename = file.getName(); 
     System.err.println(filename); 
     scan = new Scanner(file); 
     } 
     catch (IOException e) 
     { 
     System.err.println("IO EXCEPTION"); 
     return; 
     }  
    } 
    else 
    { 
     return; 
    } 
    words = new OrderedLinkedList<String>(); 
    while(scan.hasNext()) 
    { 
     String token = scan.next().toLowerCase(); 
     token = token.replace(",","").replace(".",""); 
     words.add(token); 
    } 
    scan.close(); 
    textarea.append(" "+filename+" has wordcount: "+words.size()+ 
     "\n-------------------------\n\n"); 

    for(String word : words) 
    { 
     for(int i=0;i<words.size(); i++) 
     { 
     int x =0;  // This does not work but I'm trying to find if I'm on the right track 
     if(x < words.size()) 
     textarea.append(word+"\n"); // THIS BY ITESELF WITHOUT THE INNER FOR LOOP WORKS FINE FOR DISPLAYING THE WORDS IN A TEXT AREA. 
     x++; 
    } 
    } 
    } 

    public static void main(String[] arg) 
    { 
    JFrame frame = new JFrame("Oct 29"); 
    frame.getContentPane().add(new Oct29()); 
    frame.pack(); 
    frame.setVisible(true); 
    } 
} 
+0

之後「單詞」的內容是什麼?爲什麼我問的是,你是否進入for循環?調試它?在某個地方放置一個斷點,然後逐步查看最終結果。 – mattias 2014-11-10 17:08:18

回答

0

您可以使用Map您的問題。它可以將您的密鑰(在您的情況下,這些是單詞)映射到值(反映這些單詞出現的整數值)。您可以如下初始化您的地圖:

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

在循環內部,您必須檢查地圖是否已經包含該鍵(單詞)。如果是這樣,那麼你必須遞增與它相關的整數的值。如果未添加,則只需將該對添加到地圖,並將整數值設置爲1.

相關問題