Java Algorithms Convert number to English words

Description

Java Algorithms Convert number to English words


import java.text.DecimalFormat;

public class Main {

   private static final String[] tensNames = { "", //
         " ten", //
         " twenty", //
         " thirty", //
         " forty", //
         " fifty", //
         " sixty", //
         " seventy", //
         " eighty", //
         " ninety" //
   };//from   ww w  .  ja v  a  2 s. com

   private static final String[] numNames = { "", //
         " one", //
         " two", //
         " three", //
         " four", //
         " five", //
         " six", //
         " seven", //
         " eight", //
         " nine", //
         " ten", //
         " eleven", //
         " twelve", //
         " thirteen", //
         " fourteen", //
         " fifteen", //
         " sixteen", //
         " seventeen", //
         " eighteen", //
         " nineteen" //
   };

   private static String convertLessThanOneThousand(int number) {
      String soFar;

      if (number % 100 < 20) {
         soFar = numNames[number % 100];
         number /= 100;
      } else {
         soFar = numNames[number % 10];
         number /= 10;

         soFar = tensNames[number % 10] + soFar;
         number /= 10;
      }
      if (number == 0)
         return soFar;
      return numNames[number] + " hundred" + soFar;
   }

   public static String convert(long number) {
      // 0 to 999 999 999 999
      if (number == 0) {
         return "zero";
      }

      String snumber = Long.toString(number);

      // pad with "0"
      String mask = "000000000000";
      DecimalFormat df = new DecimalFormat(mask);
      snumber = df.format(number);

      // XXXnnnnnnnnn
      int billions = Integer.parseInt(snumber.substring(0, 3));
      // nnnXXXnnnnnn
      int millions = Integer.parseInt(snumber.substring(3, 6));
      // nnnnnnXXXnnn
      int hundredThousands = Integer.parseInt(snumber.substring(6, 9));
      // nnnnnnnnnXXX
      int thousands = Integer.parseInt(snumber.substring(9, 12));

      String tradBillions;
      switch (billions) {
      case 0:
         tradBillions = "";
         break;
      case 1:
         tradBillions = convertLessThanOneThousand(billions) + " billion ";
         break;
      default:
         tradBillions = convertLessThanOneThousand(billions) + " billion ";

      }
      String result = tradBillions;

      String tradMillions;
      switch (millions) {
      case 0:
         tradMillions = "";
         break;
      case 1:
         tradMillions = convertLessThanOneThousand(millions) + " million ";
         break;
      default:
         tradMillions = convertLessThanOneThousand(millions) + " million ";
      }
      result = result + tradMillions;

      String tradHundredThousands;
      switch (hundredThousands) {
      case 0:
         tradHundredThousands = "";
         break;
      case 1:
         tradHundredThousands = "one thousand ";
         break;
      default:
         tradHundredThousands = convertLessThanOneThousand(hundredThousands) + " thousand ";
      }
      result = result + tradHundredThousands;

      String tradThousand;
      tradThousand = convertLessThanOneThousand(thousands);
      result = result + tradThousand;

      // remove extra spaces!
      return result.replaceAll("^\\s+", "").replaceAll("\\b\\s{2,}\\b", " ");
   }

   public static void main(String[] args) {
      System.out.println(convert(0));
      System.out.println(convert(1));
      System.out.println(convert(16));
      System.out.println(convert(100));
      System.out.println(convert(1316));
      System.out.println(convert(1000000));
      System.out.println(convert(123456789));
      System.out.println(convert(2147483647));

   }
}



PreviousNext

Related