2014-01-13 247 views
0

我写了一个程序,读取字母a,e,s和t以及空格在txt文件中出现的次数,它当前工作正常,但只能读取txt文件的第一行。如何让我的程序读取txt文件中的所有行,然后输出这些字母被使用的次数?感谢您的时间和帮助。java txt文件读取程序,只读取txt文件的第一行

import java.util.Scanner; 
    import java.io.FileNotFoundException; 

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

     String phrase; // a string of characters 
     int countBlank; // the number of blanks (spaces) in the phrase 
     int length;  // the length of the phrase 
     char ch;   // an individual character in the string 
     int countA; 
     int countE; 
     int countS; 
     int countT; 

     java.io.File file = new java.io.File("counting.txt"); 
     Scanner inFile = new Scanner (file); 

    Scanner scan = new Scanner(System.in); 

    phrase = inFile.nextLine(); 
    length = phrase.length(); 

      // Initialize counts 

     while (true) 
     { 
     if (phrase.equalsIgnoreCase("quit")) 

      break; 

     else 
     { 

     countBlank = 0; 
     countA = 0; 
     countE = 0; 
     countS = 0; 
     countT = 0; 

     for (int i = 0; i < length; i++) 
     { 
     if (phrase.charAt(i) == ' ') 

     countBlank++; 
     ch = phrase.charAt(i); 

      switch (ch) 
      { 
      case 'a': 
      case 'A': countA++; 
        break; 
     case 'e': 
     case 'E': countE++; 
      break; 
     case 's': 
     case 'S': countS++; 
       break; 
     case 't': 
     case 'T': countT++; 
      break; 
      } 

    } 
      System.out.println(); 
      System.out.println ("Number of blank spaces: " + countBlank); 
      System.out.println(); 

     System.out.println ("Number of A's: " + countA); 
     System.out.println(); 
     System.out.println ("Number of E's: " + countE); 
     System.out.println(); 
     System.out.println ("Number of S's: " + countS); 
     System.out.println(); 
     System.out.println ("Number of T's: " + countT); 
     break; 

     }  
    } 


    } 
    } 

回答

1

您可以尝试遍历一个while-loop文件。

替换phrase = inFile.nextLine();有:

while(inFile.hasNextLine()) // While there are lines in the file 
    phrase += inFile.nextLine(); // Add line to 'phrase' 

不要忘记用空字符串初始化String phrase

String phrase = ""; 

编辑:你的最终代码应该是这样的,有一些变化,列在这个答案的结尾。

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

    String phrase = ""; // a string of characters 
    int countBlank; // the number of blanks (spaces) in the phrase 
    int length; // the length of the phrase 
    char ch; // an individual character in the string 
    int countA; 
    int countE; 
    int countS; 
    int countT; 

    java.io.File file = new java.io.File("sample.txt"); 
    Scanner inFile = new Scanner(file); 

    while (inFile.hasNextLine()) 
     phrase += inFile.nextLine(); // Add line to 'phrase' 
    length = phrase.length(); 

    // Initialize counts 

    while (true) { 

     countBlank = 0; 
     countA = 0; 
     countE = 0; 
     countS = 0; 
     countT = 0; 

     for (int i = 0; i < length; i++) { 
      ch = phrase.charAt(i); 

      switch (ch) 
      { 
      case 'a': 
      case 'A': 
       countA++; 
       break; 
      case 'e': 
      case 'E': 
       countE++; 
       break; 
      case 's': 
      case 'S': 
       countS++; 
       break; 
      case 't': 
      case 'T': 
       countT++; 
       break; 
      case ' ': 
       countBlank++; 
       break; 
      default: 
       break; 
      } 

     } 
     System.out.println(); 
     System.out.println("Number of blank spaces: " + countBlank); 
     System.out.println(); 

     System.out.println("Number of A's: " + countA); 
     System.out.println(); 
     System.out.println("Number of E's: " + countE); 
     System.out.println(); 
     System.out.println("Number of S's: " + countS); 
     System.out.println(); 
     System.out.println("Number of T's: " + countT); 
     break; 

    } 

} 

变化:

  • 删除Scanner scan = new Scanner(System.in);,因为你不使用它。
  • 加我上面
  • 建议删除if (phrase.equalsIgnoreCase("quit")) break;
  • 新增switch-case代码时ch == ' '
  • 新增default-case,因为它被认为是良好的编程习惯。
+0

我对程序进行了这些更改,它仍然返回相同的内容。 – user3188576

+0

它适合我。你的文件是怎样的? – Christian

+0

txt文件或java文件? – user3188576

0

当然,如果要在使用while包裹inFile.nextLine()生产线你。但是,既然你只使用它,它只会让你成为第一行。

尝试包装你这个代码:

while ((phrase = inFile.nextLine()) != null) { 
    // Here code 
} 
+0

我做到了,现在程序为所有字母返回0。为什么会发生? – user3188576

0

您需要读取字符串“phrase”的下一行。 Add

phrase = inFile.nextLine();

到while循环的结尾。

0

phrase = inFile.nextLine(); 

是你的while循环。因此它只执行一次。将它添加到你的while循环中