2014-05-04 38 views
-3

我正在嘗試從一個文件中讀取Java中段落中類似單詞的出現次數,但由於某些原因計數不起作用。您能否告訴我如何修改該方法以使其可以正常工作。Java程序來計算段落中的相似單詞

void countsmwrd(String str) { 
    int count = 0; 
    String temp = ""; 
    ArrayList<String> vx = new ArrayList<String>(); 
    System.out.println("\nThe tokens are: "); 
    StringTokenizer s = new StringTokenizer(str, " ,.", true); 
    for (int i = 0; s.hasMoreTokens(); i++) { 
     vx.add(s.nextToken()); 
    } 

    for (int i = 0; i < vx.size(); i++) { 
     String c = vx.get(i); 

     for (int j = i; j < vx.size(); j++) { 
      String k = vx.get(j); 
      if (c == k && temp.indexOf(c) == -1) { 
       count = count + 1; 
      } 

     } 
     if (temp.indexOf(c) == -1) { 
      temp = temp + c; 
      System.out.println("Character " + c + " occurs " + count + " times"); 
     } 

     count = 0; 
    } 
} 
+1

當你運行它會發生什麼?等等。 – Ari

+0

[我如何比較Java中的字符串?](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) –

回答

0

您的標記器是基於「,。」分割的。在典型的段落中你不會有很多。將其更改爲僅在空間上拆分。甚至更好的是用於空白的正則表達式(「\\ s *」表示零個或多個空格)。

+1

「\\ s」的可能重複白色空間。 Java需要額外的反斜槓來告訴標記器它的意思是「\ s」。 –

+0

ta :-)增加了更正。 –

1

您可以利用Set來確定字數。我還建議通過調用str.toLowerCase()來標準化輸入字符串,以便「The」和「the」只計算一個單詞。由於分隔符不應構成單詞,因此我還會通過false獲取StringTokenizer中的returnDelims參數。這裏是一個例子:

public int wordCount(String str) { 
    StringTokenizer s = new StringTokenizer(str.toLowerCase(), " ,.", false); 
    Set<String> uniqueWords = new HashSet<String>(); 
    while (s.hasMoreTokens()) { 
     uniqueWords.add(s.nextToken()); 
    } 
    return uniqueWords.size(); 
}