- 
import java.io.BufferedReader;  
- 
import java.io.BufferedWriter;  
- 
import java.io.File;  
- 
import java.io.FileInputStream;  
- 
import java.io.FileNotFoundException;  
- 
import java.io.FileWriter;  
- 
import java.io.IOException;  
- 
import java.io.InputStreamReader;  
- 
import java.io.UnsupportedEncodingException;  
- 
  
- 
public class Number {  
- 
  
- 
    public static final String[] ENGLISH_NUMBER = { "zero", "one", "two",  
- 
            "three", "four", "five", "six", "seven", "eight", "nine" };  
- 
  
- 
    public static final String[] ENGLISH_DOCNUMBER = { "ten", "twenty",  
- 
            "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety" };  
- 
  
- 
    public static final String[] ENGLISH_UNIT = { "hundred", "thousand",  
- 
            "million", "billion" };  
- 
  
- 
    public static final StringBuilder sb = new StringBuilder(0);  
- 
  
- 
    public static void parse() {  
- 
        sb.setLength(0);  
- 
        readFile("in.txt");  
- 
        writeFile(sb.toString(), "out.txt");  
- 
  
- 
        return;  
- 
    }  
- 
  
- 
    public static void readFile(String fileName) {  
- 
  
- 
        File file = new File(fileName);  
- 
        FileInputStream fis = null;  
- 
        BufferedReader br = null;  
- 
        try {  
- 
            fis = new FileInputStream(file);  
- 
            br = new BufferedReader(new InputStreamReader(fis, "gb2312"));  
- 
            String temp = "";  
- 
            while ((temp = br.readLine()) != null) {  
- 
                sb.append(temp).append("=").append(formate(parseTotal(temp)))  
- 
                        .append("\r\n");  
- 
            }  
- 
        } catch (FileNotFoundException e) {  
- 
            e.printStackTrace();  
- 
        } catch (UnsupportedEncodingException e) {  
- 
            e.printStackTrace();  
- 
        } catch (IOException e) {  
- 
            e.printStackTrace();  
- 
        } finally {  
- 
            try {  
- 
                if (br != null) {  
- 
                    br.close();  
- 
                }  
- 
                if (fis != null) {  
- 
                    fis.close();  
- 
                }  
- 
            } catch (IOException e) {  
- 
                e.printStackTrace();  
- 
            }  
- 
        }  
- 
    }  
- 
  
- 
    public static void writeFile(String result, String fileName) {  
- 
        File f = new File(fileName);  
- 
        FileWriter fw = null;  
- 
        BufferedWriter bw = null;  
- 
  
- 
        try {  
- 
            if (!f.exists()) {  
- 
                f.createNewFile();  
- 
            }  
- 
            fw = new FileWriter(f);  
- 
            bw = new BufferedWriter(fw);  
- 
            bw.write(result);  
- 
        } catch (Exception e) {  
- 
            e.printStackTrace();  
- 
        } finally {  
- 
            try {  
- 
                if (bw != null) {  
- 
                    bw.close();  
- 
                }  
- 
            } catch (IOException e) {  
- 
                e.printStackTrace();  
- 
            }  
- 
        }  
- 
    }  
- 
  
- 
    public static String parseLine(String str) {  
- 
        String result = "";  
- 
        if (isLegel(str)) {  
- 
            while (str.length() > 0) {  
- 
                int length = str.length();  
- 
                switch (length) {  
- 
                case 1:  
- 
                    result += ENGLISH_NUMBER[Integer.valueOf(str)];  
- 
                    str = "";  
- 
                    break;  
- 
                case 2:  
- 
                    char[] strArr = str.toCharArray();  
- 
                    if (Character.getNumericValue(strArr[0]) == 0) {  
- 
                        result += ("zero" + ENGLISH_NUMBER[Character  
- 
                                .getNumericValue(strArr[1])]);  
- 
                    } else {  
- 
                        result += (ENGLISH_DOCNUMBER[Character  
- 
                                .getNumericValue(strArr[0]) - 1]  
- 
                                + " " + ENGLISH_NUMBER[Character  
- 
                                .getNumericValue(strArr[1])]);  
- 
                    }  
- 
                    str = "";  
- 
                    break;  
- 
                case 3:  
- 
                    char[] strArr1 = str.toCharArray();  
- 
                    result += ENGLISH_NUMBER[Character  
- 
                            .getNumericValue(strArr1[0])]  
- 
                            + " " + ENGLISH_UNIT[0] + " and ";  
- 
                    str = str.substring(1);  
- 
                    break;  
- 
                case 4:  
- 
                    char[] strArr2 = str.toCharArray();  
- 
                    result += ENGLISH_NUMBER[Character  
- 
                            .getNumericValue(strArr2[0])]  
- 
                            + " " + ENGLISH_UNIT[1] + " and ";  
- 
                    str = str.substring(1);  
- 
                    break;  
- 
                default:  
- 
                    break;  
- 
                }  
- 
            }  
- 
        } else {  
- 
            result = "error";  
- 
        }  
- 
  
- 
        if (result.indexOf("zero") != -1) {  
- 
            result = result.replace("zero", "");  
- 
        }  
- 
        if (result.trim().endsWith("and")) {  
- 
            result = result.substring(0, result.lastIndexOf("and"));  
- 
        }  
- 
        return result.trim();  
- 
    }  
- 
  
- 
    public static String parseTotal(String str) {  
- 
        String result = "";  
- 
        while (str.length() > 0) {  
- 
            if(str.indexOf("error") != -1)  
- 
            {  
- 
                result = "error";  
- 
                break;  
- 
            }  
- 
            if (str.length() <= 3) {  
- 
                result += parseLine(str);  
- 
                break;  
- 
            } else if (str.length() > 3 && str.length() < 7) {  
- 
                String highStr = str.substring(0, str.length() - 3);  
- 
                String lowStr = str.substring(str.length() - 3);  
- 
                result += (parseLine(highStr) + " " + ENGLISH_UNIT[1] + " " + parseLine(lowStr));  
- 
                break;  
- 
            } else if (str.length() >= 7 && str.length() <= 9) {  
- 
                String highStr = str.substring(0, str.length() - 6);  
- 
                result += (parseLine(highStr) + " " + ENGLISH_UNIT[2] + " ");  
- 
                str = str.substring(str.length() - 5);  
- 
            } else if (str.length() > 9 && str.length() <= 10) {  
- 
                String highStr = str.substring(0, str.length() - 9);  
- 
                result = parseLine(highStr) + " " + ENGLISH_UNIT[3] + " ";  
- 
                str = str.substring(str.length() - 8);  
- 
            }  
- 
        }  
- 
  
- 
          
- 
        return result.toLowerCase();  
- 
    }  
- 
  
- 
    public static boolean isLegel(String str) {  
- 
        boolean flag = true;  
- 
        if (str.length() >= 10) {  
- 
            flag = false;  
- 
        } else if (str.indexOf(".") != -1) {  
- 
            flag = false;  
- 
        } else {  
- 
            try {  
- 
                int number = Integer.parseInt(str);  
- 
                if (number <= 0) {  
- 
                    flag = false;  
- 
                }  
- 
            } catch (NumberFormatException e) {  
- 
                flag = false;  
- 
            }  
- 
        }  
- 
  
- 
        return flag;  
- 
    }  
- 
  
- 
    public static String formate(String str) {  
- 
        str = str.replace("ten one", "eleven");  
- 
        str = str.replace("ten two", "twelve");  
- 
        str = str.replace("ten three", "thirteen");  
- 
        str = str.replace("ten four", "fourteen");  
- 
        str = str.replace("ten five", "fifteen");  
- 
        str = str.replace("ten six", "sixteen");  
- 
        str = str.replace("ten seven", "seventeen");  
- 
        str = str.replace("ten eight", "eighteen");  
- 
        str = str.replace("ten nine", "nineteen");  
- 
  
- 
        return str;  
- 
    }  
- 
  
- 
    public static void main(String[] args) {  
- 
        System.out.println(formate(parseTotal("11632")));  
- 
        System.out.println(formate(parseTotal("123")));  
- 
    }  
- 
}  
 
The output is: 
eleven thousand six hundred and thirty two
one hundred and twenty three