Question

The program needs to count and display the number of times that the specified charector appears in the text file.

Currently turning up zero for the total. I'm not if I should be using a different loop, I've also tried using a 'for' loop.

// Hold user input and sum
String fileName;    // Holds the name of the file
String letter;      // Letter to search for in the file
int total = 0;      // Holds the total number of characters in the file


// Get the name of the file and character from the user
fileName = JOptionPane.showInputDialog("Please enter the name of a file:");
letter = JOptionPane.showInputDialog("Please enter a letter contained in the string");


// Open the file for reading
File file = new File(fileName);         
Scanner inputFile = new Scanner(file);  // Declare new scanner object for file reading


// Set accumulator to zero
int count = 0;

if (inputFile.nextLine().equalsIgnoreCase(letter)) {                                

    count++;          // add letter occurrence

    total += count;   // add the letter occurrence to the total
}
Was it helpful?

Solution

    BufferedReader reader = new BufferedReader(new FileReader("somefile.txt"));
    int ch;
    char charToSearch='a';
    int counter=0;
    while((ch=reader.read()) != -1) {
        if(charToSearch == (char)ch) {
            counter++;
        }
    };
    reader.close();

    System.out.println(counter);

Is this of any help?

OTHER TIPS

There is bug in your code.Correct code below-

   String fileName;    // Holds the name of the file
    String letter;      // Letter to search for in the file

    // Get the name of the file and character from the user
    fileName = "C:\\bin\\GWT.txt";
    letter = "X";


    // Open the file for reading
    File file = new File(fileName);         
    Scanner inputFile = new Scanner(file);  // Declare new scanner object for file reading


    // Set accumulator to zero
    int count = 0;
    while(inputFile.hasNext()) {
      if (inputFile.nextLine().toLowerCase().contains(letter.toLowercase())) { 
           count++;          // add letter occurrence
       }
    }
    System.out.println(count);

This answer is assuming each line in your text file contains just one letter as your question suggests.

You need to wrap your if statement in a loop as currently you are only checking the first line of the file:

     while(inputFile.hasNext()) {
         if (inputFile.nextLine().equalsIgnoreCase(letter))    {                                

             count++;          // add letter occurrence

             total += count;   // add the letter occurrence to the total
         }
     }

Also you can replace:

count++;
total+= count;

with just

total++;
String line=""
while(inputFile.hasNext()) {
  line = inputFile.nextLine();
  for(int i=0; i<line.length(); i++ ){
     if (line.charAt(i)== letter)                                    
         count++;          

 }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top