阿拉伯数字“0”有“零”和“〇”两种汉字书写形式。一个数字用做计量时,其中“0”的汉字书写形式为“零”,用做编号时,“0”的汉字书写形式为“〇”。java
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { private static final String[] CN_NUMBER = { "〇", "一", "二", "三", "四", "五", "六", "七", "八", "九" }; private static final String[] CN_UNIT = { "", "十", "百", "千" }; /** * 格式化:数字转汉字 * 未完待续.. * @param str * @return */ public String formatMethod(String str) { str = str.replace(" ", ""); //删除空格 Pattern pattern = Pattern.compile("^\\d+(\\.\\d+)?$"); //非负数 Matcher flag = pattern.matcher(str); if (!flag.matches()) { //System.out.println("格式不正确!"); return null; } String p_int = str.split("\\.")[0]; //整数部分 String p_dec = str.indexOf(".") == -1 ? "" : str.split("\\.")[1]; //小数部分 String[] intArr = split(p_int); //分隔,每4位为一组 return null; } /** * 格式化4位整数 * @param str * @return */ public String formatInt(String str) { StringBuilder sb = new StringBuilder(); boolean isZero = false; for (int i = 0; i < str.length(); i++) { //int n = Integer.valueOf(str.charAt(i) + ""); int n = str.charAt(i) - 48; //0-9的ASCII码为48-57 if (n == 0) { isZero = true; } else { if (isZero) { sb.append(CN_NUMBER[str.charAt(i - 1) - 48]); } sb.append(CN_NUMBER[n]); sb.append(CN_UNIT[str.length() - 1 - i]); isZero = false; } } return sb.toString(); } /** * 分隔,每4位为一组。例:输入0123456,输出[0012, 3456] * @param num * @return */ public String[] split(String num) { int remainder = num.length() % 4; //取余 if (remainder != 0) { String pre = num.substring(0, remainder); String suf = num.substring(remainder); num = String.format("%04d", Integer.valueOf(pre)) + suf; } String[] arr = new String[num.length() / 4]; int j = 0; for (int i = 0; i < num.length(); i += 4) { arr[j++] = num.substring(i, i + 4); } return arr; } /** * 例:输入2018,输出二〇一八 * @param str * @return */ public String toYear(String str) { StringBuilder sb = new StringBuilder(str); for (int i = 0; i < str.length(); i++) { sb.replace(i, i + 1, CN_NUMBER[str.charAt(i) - 48]); } return sb.toString(); } }