算法:数目字转换大写
算法:数字转换大写
import java.util.ArrayList; import java.util.List; public class Demo { private char ZERO = '0'; private char ZERO_CN = '零'; private String[] NUMBER = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; private String[] UNIT = { "", "拾", "佰", "仟" }; private String[] MATRIX = { "", "万", "億", "兆", "吉", "太", "拍", "艾", "泽", "尧" }; public String change(long num) { if (num < 0) { return ""; } List<String> data = new ArrayList<String>(); format(String.valueOf(num), data); return show(data); } public void format(String str, List<String> data) { int len = str.length(); if (len == 1) { data.add(NUMBER[str.charAt(0) - ZERO]); return; } if (len > 4) { format(str.substring(str.length() - 4), data); format(str.substring(0, str.length() - 4), data); return; } formatUnit(str, data); } private void formatUnit(String str, List<String> data) { String result = ""; while (str.length() > 0 && Long.parseLong(str) > 0) { if (str.charAt(0) == ZERO) { result += NUMBER[str.charAt(0) - ZERO]; str = String.valueOf(Long.parseLong(str)); continue; } result += NUMBER[str.charAt(0) - ZERO] + UNIT[str.length() - 1]; str = str.substring(1); } data.add(result); } private String show(List<String> data) { String result = ""; for (int i = data.size() - 1; i >= 0; i--) { String str = data.get(i); if (str.length() == 0) { continue; } result += data.get(i) + MATRIX[i]; } return trimZeroCN(result); } private String trimZeroCN(String str) { if (str.length() <= 1) { return str; } char[] ch = str.toCharArray(); int start = 0; int end = str.length() - 1; while (ch[start] == ZERO_CN) { start++; } while (ch[end] == ZERO_CN) { end--; } return str.substring(start, end + 1); } }
9223372036854775807 ==> 玖佰贰拾贰吉叁仟叁佰柒拾贰兆零叁佰陆拾捌億伍仟肆佰柒拾柒万伍仟捌佰零柒 100000009 ==> 壹億零玖 103050709 ==> 壹億零叁佰零伍万零柒佰零玖 123456789 ==> 壹億贰仟叁佰肆拾伍万陆仟柒佰捌拾玖 103006 ==> 壹拾万叁仟零陆 100006 ==> 壹拾万零陆 123450 ==> 壹拾贰万叁仟肆佰伍拾 123456 ==> 壹拾贰万叁仟肆佰伍拾陆 10000 ==> 壹万 10005 ==> 壹万零伍 12000 ==> 壹万贰仟 10045 ==> 壹万零肆拾伍 12005 ==> 壹万贰仟零伍 12300 ==> 壹万贰仟叁佰 10345 ==> 壹万零叁佰肆拾伍 12045 ==> 壹万贰仟零肆拾伍 12305 ==> 壹万贰仟叁佰零伍 12340 ==> 壹万贰仟叁佰肆拾 12345 ==> 壹万贰仟叁佰肆拾伍 1000 ==> 壹仟 1004 ==> 壹仟零肆 1034 ==> 壹仟零叁拾肆 1204 ==> 壹仟贰佰零肆 1230 ==> 壹仟贰佰叁拾 1234 ==> 壹仟贰佰叁拾肆 123 ==> 壹佰贰拾叁 12 ==> 壹拾贰 10 ==> 壹拾 6 ==> 陆 0 ==> 零