如图,分享一个我项目中自用的数字转换工具,将阿拉伯数字转成中文,例如数据库里存的是期刊1或者10,而拿出来显示的时候,是显示第十期。
这是从网站找来的,经过我自己修改后的代码:
NumberConvertUtils.java
/** * 数字转换工具类 * * @author rubekid */ public class NumberConvertUtils { private final static String[] SIMPLIFIED_GROUP_UNITS = {"", "万", "亿", "兆"}; private final static String[] TRADITIONAL_GROUP_UNITS = {"", "萬", "億", "兆"}; private final static String[] SIMPLIFIED_BASE_UNITS = {"", "十", "百", "千"}; private final static String[] TRADITIONAL_BASE_UNITS = {"", "拾", "佰", "仟"}; private final static char[] SIMPLIFIED_NUMBERIC = {'零', '一', '二', '三', '四', '五', '六', '七', '八', '九'}; private final static char[] TRADITIONAL_NUMBERIC = {'零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'}; /** * 转为中文数字 * * @param number 数值 * @param isTraditional 是否转为繁体 * @return */ public static String toChinese(long number, boolean isTraditional) { char[] numberic = isTraditional ? TRADITIONAL_NUMBERIC : SIMPLIFIED_NUMBERIC; String[] baseUnits = isTraditional ? TRADITIONAL_BASE_UNITS : SIMPLIFIED_BASE_UNITS; if (number == 0) {//判断是否为0 return String.valueOf(numberic[0]); } String str = String.valueOf(number); char[] numbers = str.toCharArray(); int len = str.length(); //统计连续出现的0 int zeroCount = 0; StringBuffer stringBuffer = new StringBuffer(); for (int i = 0; i < len; i++) { int value = Integer.parseInt(String.valueOf(numbers[i])); int index = len - i - 1; //在分组中的下标 int _index = index % 4; if (value == 0) { zeroCount++; if ((_index == 0 && zeroCount < 4) || (index % 8 == 0 && zeroCount < 8)) { stringBuffer.append(getGroupUnit(index, isTraditional)); zeroCount = 0; } } else { if (zeroCount > 0) { stringBuffer.append(numberic[0]); } if (_index == 0) { stringBuffer.append(numberic[value]).append(baseUnits[_index]).append(getGroupUnit(index, isTraditional)); zeroCount = 0; } else { //调整以“一十”开头的不需要出现“一” 如:100000 读“十万”而不是“一十万” if (_index == 1 && i == 0 && value == 1) { stringBuffer.append(baseUnits[_index]); } else { stringBuffer.append(numberic[value]).append(baseUnits[_index]); } } zeroCount = 0; } } return stringBuffer.toString(); } /** * 转为中文数字 */ public static String toChinese(long number) { return toChinese(number, false); } /** * 获取分组单位 * */ private static String getGroupUnit(int index, boolean isTraditional) { String[] groupUnits = isTraditional ? TRADITIONAL_GROUP_UNITS : SIMPLIFIED_GROUP_UNITS; String groupUnit = groupUnits[(index / 4) % 2]; if (index % 8 == 0 && index > 0) { groupUnit += groupUnits[(index / 8) + 1]; } return groupUnit; } }
测试:
public static void main(String[] args) throws Exception { System.out.println(NumberConvertUtils.toChinese(0)); //零 System.out.println(NumberConvertUtils.toChinese(10, false)); //十 System.out.println(NumberConvertUtils.toChinese(99, true)); //玖拾玖 System.out.println(NumberConvertUtils.toChinese(1010)); //一千零一十 }
文章评论