Welcome to HBH! If you have tried to register and didn't get a verification email, please using the following link to resend the verification email.

Number to Word Converter 2.0 - Java Code Bank


Number to Word Converter 2.0
This is another approach at the number to word converter. This time I took use of char and pointers from the ascii table. ArrayList to make a dynamic array, added a boolean for negative numbers.
                package word_converter_fn;
import java.util.ArrayList;

/**
 * @author elmiguel
 */

public class word_converter_fn21 {
   private static String[] ones     = {"zero","one","two","three","four","five","six","seven","eight","nine"}; 
   private static String[] elevens  = {"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"}; 
   private static String[] tens     = {"twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"};
   private static String[] grouping = {"hundred", "thousand", "million", "billion", "trillion", "quadrillion", "sextillion", "septillion", "octillion","nonillion", "decillion"}; 

   // Return the char digit character as is literal counter part (pointer)
   public static String GetDigit(String[] type, char dc){
       if (type == tens) dc -= 2; // correct the index for ten. ;p 
       return type[dc - 48].toString().trim();
   }  
   
   public static String ProcessDouble(char one, char two){
       String temp = (one == '1') ? GetDigit(elevens, one) : GetDigit(tens, one) + " " + GetDigit(ones, two);
       // if out ends with "zero", trim it out. thank you, thank you ;p
       if (temp.endsWith("zero")) temp = temp.substring(0, temp.length()-4);
       return temp.trim();
   }
   
   public static String ProcessTriple(char one, char two, char three, int set){     
       String num = (one == '0') ? "" /*Awesome: zero hundred!*/ : GetDigit(ones, one) + " " + grouping[0];
       String num2 = (two == '0') ? GetDigit(ones, three) : ProcessDouble(two, three);
       String suffix = grouping[set];
       String result = num + " " + num2 + " " + suffix;
       return result.trim();
   }

   public static String prePad(String n, int pad){
       String padding = "";
       switch(pad){
           case 0:break;//has three numbers
           case 1:padding = "00"; break;//only one digit
           case 2:padding = "0"; break; //only two digits
       }     
       return padding + n;
   }
   
   public static String Process(ArrayList<String> numbers){
       String result = "";
       //Create a new array, since ArrayList sucks with iterations
       String[] nums = new String[numbers.size()];       
       for (int i=0; i<=numbers.size()-1; i++) nums[i] = numbers.get(i);    

       for (int i = 0;i <= nums.length-1; i++){ 
           result += " " + ProcessTriple(nums[i].charAt(0),nums[i].charAt(1),nums[i].charAt(2), (nums.length-1)-i);      
       }
       // return without the hundred suffix at the end. then trim it
       return result.substring(0,result.length()-8).trim();           
   }
  
   public static String convert(String n){       
       String out = "";
       int len = n.length();
       // Single digit, return number
       if (len == 1) return GetDigit(ones, n.charAt(0)); 
       
       // double digits, check for ten or elevens
       if (len == 2){ 
           if (n.charAt(0) == '1'){// "this amplifier goes to eleven!"
               return GetDigit(elevens, n.charAt(1));                
           } else {
               //not and eleven; return number
               out = ProcessDouble(n.charAt(0), n.charAt(1));
           }
       }
    
       // 3 or more digits, process groups and finalize output
       if (len >= 3){
          // correct the number to add the right amount of sets
          n = prePad(n, n.length()%3);
          
          //Create a new ArrayList<String> (dynamic) since normal java Arrays suck at dynamics
          //use (n.length()-1) instead of len because we padded the number
          ArrayList<String> sets = new ArrayList<String>();
          for(int i=0; i <= (n.length()-1)/3; i++){ 
              sets.add(n.substring(i*3, (i*3)+3));        
          }      
         out = Process(sets);
       }
       return out.trim();
   }
   
   public static void main(String[] args){
        for(String arg : args){
           if (arg != null || !arg.equals("")){                
               String input = arg;
               //Check or negative numbers
                boolean sign = false;
                if (arg.startsWith("-")){
                    sign = true;
                    arg = arg.substring(1);
                }
               String output = (sign)? "negative " + convert(arg.trim()) : convert(arg.trim());
               
               System.out.println("input : " + input + "\r\nOutput : " + output);
           }
       }      
   }
}

            
Comments
Sorry but there are no comments to display