Throwing exceptions and implementing through subclass
I'm trying to create a subclass of java.lang.RuntimeException called HashException and I have to modify NumStream to throw it when my NumStream class encounters the hash character(#).  Not too sure how to implement this, I have some stuff and it does throw the exception but I'm wondering if there's a cleaner way to implement this or even if I'm doing it correctly.

    import java.io.*;
    import java.lang.*;

    class HashException extends java.lang.RuntimeException
    {
        public void write(int c)
        {
            if(c == 35) throw new RuntimeException("This is a Hash Tag!");
        }
    }

    public class NumStream extends OutputStream
    {
        public void write(int c) throws IOException
        {  
            StringBuffer sb = new StringBuffer();

            HashException h = new HashException();
            h.write(c);

            switch(c)
            {
                case ' ': sb.append(" ");
                    break;
                case '1': sb.append("One");
                    break;
                case '2': sb.append("Two");
                    break;
                case '3': sb.append("Three");
                    break;
                case '4': sb.append("Four");
                    break;                
                case '5': sb.append("Five");
                    break; 
                case '6': sb.append("Six");
                    break;
                case '7': sb.append("Seven");
                    break;
                case '8': sb.append("Eight");
                    break;     
                case '9': sb.append("Nine");
                    break; 
                case '0': sb.append("Zero");
                    break;
                default:  sb.append(Integer.toString(c));
                    break;
            }
            System.out.print(sb);
        }
        public static void main(String[] args) 
        {
            NumStream ns = new NumStream();
            PrintWriter pw = new PrintWriter(new OutputStreamWriter(ns));
            pw.println("123456789 and ! and # ");
            pw.flush();
        }
    }

This is my output:

    run:
    Exception in thread "main" java.lang.RuntimeException: This is a Hash Tag!
    	at HashException.write(NumStream.java:8)
    	at NumStream.write(NumStream.java:19)
    OneTwoThreeFourFiveSixSevenEightNine and ! and 	at     java.io.OutputStream.write(OutputStream.java:116)
    	at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
    	at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
    	at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)
    	at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)
     	at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
    	at java.io.PrintWriter.flush(PrintWriter.java:320)
    	at NumStream.main(NumStream.java:54)
    Java Result: 1
Throwing exceptions and implementing through subclass
===

I'm trying to create a subclass of java.lang.RuntimeException called HashException and I have to modify NumStream to throw it when my NumStream class encounters the hash character(#).  Not too sure how to implement this, I have some stuff and it does throw the exception but I'm wondering if there's a cleaner way to implement this or even if I'm doing it correctly.

    import java.io.*;
    import java.lang.*;

    class HashException extends java.lang.RuntimeException
    {
        public void write(int c)
        {
            if(c == 35) throw new RuntimeException("This is a Hash Tag!");
        }
    }

    public class NumStream extends OutputStream
    {
        public void write(int c) throws IOException
        {  
            StringBuffer sb = new StringBuffer();

            HashException h = new HashException();
            h.write(c);

            switch(c)
            {
                case ' ': sb.append(" ");
                    break;
                case '1': sb.append("One");
                    break;
                case '2': sb.append("Two");
                    break;
                case '3': sb.append("Three");
                    break;
                case '4': sb.append("Four");
                    break;                
                case '5': sb.append("Five");
                    break; 
                case '6': sb.append("Six");
                    break;
                case '7': sb.append("Seven");
                    break;
                case '8': sb.append("Eight");
                    break;     
                case '9': sb.append("Nine");
                    break; 
                case '0': sb.append("Zero");
                    break;
                default:  sb.append(Integer.toString(c));
                    break;
            }
            System.out.print(sb);
        }
        public static void main(String[] args) 
        {
            NumStream ns = new NumStream();
            PrintWriter pw = new PrintWriter(new OutputStreamWriter(ns));
            pw.println("123456789 and ! and # ");
            pw.flush();
        }
    }

This is my output:

    run:
    Exception in thread "main" java.lang.RuntimeException: This is a Hash Tag!
    	at HashException.write(NumStream.java:8)
    	at NumStream.write(NumStream.java:19)
    OneTwoThreeFourFiveSixSevenEightNine and ! and 	at     java.io.OutputStream.write(OutputStream.java:116)
    	at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
    	at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
    	at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)
    	at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)
     	at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
    	at java.io.PrintWriter.flush(PrintWriter.java:320)
    	at NumStream.main(NumStream.java:54)
    Java Result: 1