2017-09-11 53 views
0

我已經實現代碼來計算數字: - 字符 - 字 - 行 - 字節 在文本文件中。 但是如何統計字典大小:這個文件中使用的不同單詞的數量? 另外,如何實現只能遍歷字母的迭代器? (忽略空格)如何計算文本文件中的唯一字?

public class wc { 
    public static void main(String[] args) throws IOException { 
    //counters 
     int charsCount = 0; 
     int wordsCount = 0; 
     int linesCount = 0; 

     Scanner in = null; 
     File file = new File("Sample.txt"); 

     try(Scanner scanner = new Scanner(new BufferedReader(new FileReader(file)))){ 

      while (scanner.hasNextLine()) { 

       String tmpStr = scanner.nextLine(); 
       if (!tmpStr.equalsIgnoreCase("")) { 
        String replaceAll = tmpStr.replaceAll("\\s+", ""); 
        charsCount += replaceAll.length(); 
        wordsCount += tmpStr.split("\\s+").length; 
       } 
       ++linesCount; 
      } 

     System.out.println("# of chars: " + charsCount); 
     System.out.println("# of words: " + wordsCount); 
     System.out.println("# of lines: " + linesCount); 
     System.out.println("# of bytes: " + file.length()); 

     } 
    } 
} 
+9

將每個單詞添加到'Set'中,並獲取其大小? – Asew

+0

@ user7294900,但通過使用boolean containsValue(Object value)方法或boolean containsKey(Object key)? – JeyKey

+0

@Asew,所以我不必檢查是否已經有這樣的詞?我知道Set沒有重複,但是隻要執行add()方法就會在這裏添加一個char,如果沒有這樣的單詞,並且如果有的話不會這樣做? – JeyKey

回答

0

要獲得獨特的單詞和他們的罪狀:
1.從分割文件的獲得行成一個字符串數組
2.存儲這個字符串數組的一個HashSet
3的內容重複步驟1和2,直到文件結尾
4.獲取獨特的單詞和他們的數量從

的Hashset

我喜歡張貼邏輯和僞代碼,因爲這將有助於OP通過解決問題發佈學到一些東西。

-2

嘿@JeyKey你可以使用HashMap。這裏我也使用迭代器。你可以看看這個代碼。

public class CountUniqueWords { 

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

    File f = new File("File Name"); 
    ArrayList arr=new ArrayList(); 
    HashMap<String, Integer> listOfWords = new HashMap<String, Integer>(); 
    Scanner in = new Scanner(f); 
    int i=0; 
    while(in.hasNext()) 
    { 
    String s=in.next(); 
    //System.out.println(s); 
    arr.add(s); 
    } 
    Iterator itr=arr.iterator(); 
    while(itr.hasNext()) 
    {i++; 

     listOfWords.put((String) itr.next(), i); 
     //System.out.println(listOfWords); //for Printing the words 
    } 

    Set<Object> uniqueValues = new HashSet<Object>(listOfWords.values()); 

    System.out.println("The number of unique words: "+uniqueValues.size()); 
    } 
    } 
+1

所以你使用ArrayList來存儲單詞......只是爲了遍歷它並將它放在地圖中(名爲'listOfWords'以增加混淆)?你使用地圖只是爲了在Set中使用它的值?爲什麼? – Deltharis