Solved

Using array to count letters in a particular text file..(java)

Posted on 2004-04-17
7
5,992 Views
Last Modified: 2007-12-19
This program is used in counting letters in particular text.It counts the frequency of each letter e.g z= 30, c=20. and prints the results.I managed to work out part of it. the main problem came in when counting the letters using arrays.. while i was trying to compile it..there was a problem with line i have highlighted(****). could any of u assist with this. and maybe if there is another problem..jus point out or assist..

import java.io.*;

public class BufferedReaderTest {

  public static void main(String args[]) throws Exception {
    char[] capital = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J','K', 'L', 'M', 'N',
                      'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};

    FileReader fr = new FileReader("watu.txt");
    BufferedReader buffer = new BufferedReader(fr);
   
    String inString;

    while ((inString = buffer.readLine()) !=null) {
       String upperCase = inString.toUpperCase();
       System.out.println(upperCase);
     }
       int nextChar;
               char ch;
               int count=0;
            for (int i = 0; i < 26; i++)
            {


     while ( (nextChar = inString.read() ) != -1 ) ***problem with this line**
     {

     ch = (char) nextChar;
     if( ch== capital[i])
     {
      count++;
                }

     }
       System.out.print("  " + capital[i]);
       System.out.println("          " + count);


     fr.close();
     }
   }
  }
0
Comment
Question by:chataholic4real
  • 3
  • 3
7 Comments
 
LVL 1

Expert Comment

by:BRPXQZME
Comment Utility
I don't think String has a read() method.

However, BufferedReader does.  As a matter of fact, FileReader does, too.  I admittedly don't know squat about Java, but you should try looking into using those, I think.  Also, you may find the Java documentation at http://java.sun.com/j2se/1.4.2/docs/api/index.html extremely helpful.
0
 

Author Comment

by:chataholic4real
Comment Utility
i have rectified that line..(with an error)
its now..while ( (nextChar =fis.read() ) != -1 )
 The program compiles properly but..it gives
A=0
then it gives the following error message.

Exception in thread "main" java.io.IOException: Stream closed
        at sun.nio.cs.StreamDecoder.ensureOpen(StreamDecoder.java:37)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:152)
        at sun.nio.cs.StreamDecoder.read0(StreamDecoder.java:131)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:117)
        at java.io.InputStreamReader.read(InputStreamReader.java:151)
        at BufferedReaderTest.main(BufferedReaderTest.java:25)

i really dont know..where the problem is guyz..could u help

0
 
LVL 1

Accepted Solution

by:
KartikShah earned 100 total points
Comment Utility
Hi,

I tried your code, I have made a few modification to it.

The reason you got that exception, because, you were trying to read from the stream, which has alread reached the end of file.  You will need reopen the stream, else you can try, the modification below :)

-----------------------Start---------------------------

import java.io.*;

public class BufferedReaderTest
{
 
  public static void main(String args[]) throws Exception
  {
    char[] capital =
    { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J','K', 'L', 'M', 'N',
      'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
     
      FileReader fr = new FileReader("c:/kartik shah/tp/experts exchange/watu.txt");
      BufferedReader buffer = new BufferedReader(fr);
     
      String inString;
      /**
        * Creating a string buffer to store the data read, to avoid multiple reads. :)
       **/
      StringBuffer completeText = new StringBuffer();
     
      while ((inString = buffer.readLine()) !=null)
      {
        String upperCase = inString.toUpperCase();
        System.out.println(upperCase);
        completeText.append(upperCase);
      }
      /**
       * Since I am using the string buffer, next char is not required
       **/
      //int nextChar;
      char ch;
      int count=0;
      for (int i = 0; i < 26; i++)
      {
        count = 0;
       
        /**
         * Replacing while with a for loop, since using a StringBuffer
         **/
        //while ( (nextChar = inString.read() ) != -1 ) //***problem with this line**
        for (int j = 0; j<completeText.length(); j++)
        {
          ch = completeText.charAt(j) ;
          if( ch== capital[i])
          {
            count++;
          }
        }
        System.out.print("  " + capital[i]);
        System.out.println("          " + count);
        fr.close();
      }
  }
}

-------------------------End-------------------------------

Hope is helps you.

Kartik
0
Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

 

Author Comment

by:chataholic4real
Comment Utility
I want to say thank you again Kartik..it works..i really appreciate..so much...
Thanx a million..
0
 
LVL 1

Expert Comment

by:KartikShah
Comment Utility
Welcome anytime ... :)
0
 

Author Comment

by:chataholic4real
Comment Utility
is there a way i could modify this code so that instead of printing on the screen..i could print the results on a file...and also normalise the values i.e if a= 12, b=10, c=13...i could divide all the values by 13. so as to be able to plot a histo gram
0
 
LVL 1

Expert Comment

by:KartikShah
Comment Utility
Yes, you can do that easily. Al you will need to do , is open a filewriter object .. and write the data to that object. :-) The the fun of OOPs .. do more with less :D
0

Featured Post

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

A short article about a problem I had getting the GPS LocationListener working.
This is about my first experience with programming Arduino.
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

6 Experts available now in Live!

Get 1:1 Help Now