Anybody reading this know much about Java?

I’m working on a program for the Java programming class I’m taking.  I’m having trouble getting it to work right.  Anyone know anything about Java and think you can possibly help me?  

So, a sample result of running the program is below:

Please enter the encrypted phone number: 4348885548
Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: 10
 at java.lang.String.charAt(Unknown Source)
 at PhoneNumberDecrypt.main(PhoneNumberDecrypt.java:137)

and down there is the code.

I’m stumped.

/*
Program name: PhoneNumberDecrypt.java
Author: Robert Zygala
Date: 11/15/2005
Assignment: Java 5 Illuminated page 363 # 72

*/

import java.util.Scanner;

public class PhoneNumberDecrypt
{
 
 
  public static void main( String [] args )
  {
 
 
  /////////////////////////////////////////////////////////////////////////////////////////////////////////
    boolean validPhoneNumber;
 
    int digitsInNumber, i;
   
  String phoneNumber, decryptedPhoneNumber = “”, decryptedAreaCode = “”, decryptedPrefix = “”,
         decryptedSuffix = “”, decrypting;
  
  char nextCharacter;
   
    Scanner scan = new Scanner( System.in ); 
 
 /////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 
    do  // while( !(validPhoneNumber) )
  {
    digitsInNumber = 0;
 
      System.out.print( “Please enter the encrypted phone number: “);    
  
  phoneNumber = scan.next();
  
  i = 0; //set index to 0 for scanning
  

  //This next section throws away all non-digit characters and “decrypts” digit characters
  do
  {
     nextCharacter = phoneNumber.charAt( i );
  
   switch(nextCharacter)
   {
     case ‘0’:
     decrypting = “8”;
     digitsInNumber++;
       decryptedPhoneNumber += decrypting; //adds the newly decrypted digit to decryptedPhoneNumber
     break;
   
   case ‘1’:
     decrypting = “9”;
           digitsInNumber++;
       decryptedPhoneNumber += decrypting; //adds the newly decrypted digit to decryptedPhoneNumber
     break;
   
   case ‘2’:
     decrypting = “0”;
     digitsInNumber++;
       decryptedPhoneNumber += decrypting; //adds the newly decrypted digit to decryptedPhoneNumber
           break;
    
   case ‘3’:
     decrypting = “1”;
     digitsInNumber++;
           decryptedPhoneNumber += decrypting; //adds the newly decrypted digit to decryptedPhoneNumber
     break;
   
   case ‘4’:
     decrypting = “2”;
     digitsInNumber++;
       decryptedPhoneNumber += decrypting; //adds the newly decrypted digit to decryptedPhoneNumber
     break;
   
   case ‘5’:
     decrypting = “3”;
     digitsInNumber++;
       decryptedPhoneNumber += decrypting; //adds the newly decrypted digit to decryptedPhoneNumber
     break;
   
   case ‘6’:
     decrypting = “4”;
     digitsInNumber++;
       decryptedPhoneNumber += decrypting; //adds the newly decrypted digit to decryptedPhoneNumber
           break;
   
   case ‘7’:
     decrypting = “5”;
     digitsInNumber++;
       decryptedPhoneNumber += decrypting; //adds the newly decrypted digit to decryptedPhoneNumber
     break;
    
   case ‘8’:   
     decrypting = “6”;
     digitsInNumber++;
       decryptedPhoneNumber += decrypting; //adds the newly decrypted digit to decryptedPhoneNumber
     break;
    
   case ‘9’:
     decrypting = “7”;
           digitsInNumber++;
       decryptedPhoneNumber += decrypting; //adds the newly decrypted digit to decryptedPhoneNumber
     break;
   
    default:
      decrypting = “0”;//not actually used in program, only included because compiler requires it
      break;
       
     } //end switch( nextCharacter)
  
      
   
   i++;
  }while( digitsInNumber < 10);
    
  
    for( i = 0; i < 11; i++)
  {
  
    if( i <= 2 ) //Takes the first 3 numbers in decryptedPhoneNumber and assigns them to decryptedAreaCode
    {
      decryptedAreaCode += decryptedPhoneNumber.charAt( i );
    }
    else if( i > 2 && i <= 5 ) //Takes the next 3 numbers in decryptedPhoneNumber and assigns them to decryptedPrefix
    {
      decryptedPrefix += decryptedPhoneNumber.charAt( i );
    }
    else //Takes the last 4 numbers in decryptedPhoneNumber and assigns them to decryptedSuffix
    {
      decryptedSuffix += decryptedPhoneNumber.charAt( i );
    }
     
  }//ends for( int counter = 0; counter < 11; counter++) loop
  
  if( decryptedAreaCode == “212” )
  {
    validPhoneNumber = true;
    System.out.println(“The decrypted phone number is ” + decryptedAreaCode + “-”
                        + decryptedPrefix + “-” + decryptedSuffix );
  }
  else
  {
   validPhoneNumber = false;
   System.out.println( “The decrypted number is not a valid New York phone number”);
  }

    
  }while( !(validPhoneNumber) ); //repeats until the output is valid

 
  } //ends main()
  
}//ends the class