2014-12-02 96 views
-1

我想計算此文本文件中每個字母字符的數量,除非行以「>」開頭,在這種情況下,它只會將該行寫入文件。這是我的,它不會編譯,因爲它說「error: cannot find symbol」,並指出在我的聲明line.length期間。計算文本文件中的字符並打印到文本文件

爲什麼不能正常工作?要讀取

String line; 
while ((line = br.readLine()) != null) 
{ 
    if (line.startsWith(">")) 
    { 
     line += "\t"; 
     bw.write (line); 
    } 
    else 
    { 
      int aCounter=0; 
      int bCounter=0; 
      int cCounter=0; 
     for (int m=0; m < line.length; m++) 
     { 
      char letter = line.charAt(m); 


      switch (letter) 
      { 
       case 'A': 
        aCounter++; 
        break; 
       case 'B': 
        bCounter++; 
        break; 
       case 'C': 
        cCounter++; 
        break; 
      } 
      }  
     bw.write("A:" + aCounter + " B:" + bCounter + " C:" + cCounter); 

} 

文件樣本:

這是一個程序,將計算字符數 abcdabcdababab

想程序輸出:

這是一個程序,將統計字符 a:5 b:5 c:2 d:2

+0

line.length()應該修復你的問題。此外,作爲一個良好的JAVA練習,您可以使用hashmap來跟蹤每個角色的數量。要確定您擁有的字符是否是字母字符,可以使用Character.isLetter(string.charAt(m))。請參閱此條目以獲取更多詳細信息:http://stackoverflow.com/questions/4047808/what-is-the-best-way-to-tell-if-a-character-is-a-letter-or-number- in-java-withou – 2014-12-02 20:50:32

+0

做上面的HashMap思想也是避免創建26個不同變量的簡單方法。從編碼的角度(更多的變量意味着更多的混亂機會)和從懶惰的角度(大量輸入,或大量的複製/粘貼/更改,從而產生更多的編碼錯誤)創建多個變量是一個壞主意 – Xynariz 2014-12-02 21:08:08

+0

謝謝您的幫助!它現在可以順利運行和編譯,但每個字母的計數都不正確。這是打印如:A:0 B:0 A:0 A:0 B:1 A:0 B:0 – 2014-12-02 22:14:11

回答

4

它應該是line.length()與表示的方法的參數:

for (int m=0; m < line.length(); m++) 
+0

我加了這個,現在它運行,但它打印計數錯誤。它看起來像這樣:A:0 B:1 A:0 C:1 B:0 B:0 A:1 – 2014-12-02 22:07:02

1

必須使用數組的length財產和字符串的length()方法相混淆。這些方法必須通過()(圓括號)進行訪問,並且可以通過名稱訪問屬性。

UPDATE: 需要初始化以上的計數器循環。它們在循環的每次迭代中重置爲0。

int Acounter=0; int Bcounter=0; int Ccounter=0;

這些應該高於用於loop.Another建議是,在Java變量具有開始與小寫字母(和類應與大寫字母開頭)。例如:ACounter應該是aCounter

+0

偉大的建議!它現在編譯並運行,但它不正確地打印每個字母的數字。它類似於A:0 A:0 B:1 A:0 A:0 A:0 C:1 – 2014-12-02 22:11:42

+0

看看更新的答案。 – 2014-12-02 22:17:10

+0

我已經將這些變量初始化了,並且我已經按照您的建議將所有變量更改爲小寫。好決定。出於某種原因,我得到了同樣的答案。非常感謝你的幫助。我這麼簡單的程序遇到了很多麻煩。 – 2014-12-03 01:24:30