2014-12-02 98 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