數字格式化工具,還沒在網上搜索其餘的數字格式化工具,暫時寫這個頂替一下,數據格式化還存在不少問題,暫時能知足要求吧。之後再慢慢的調整修改。java
package com.common.util; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created by rico on 2016/12/23. * 數字格式戶工具 */ public class DigitalUtil { private static final Logger logger = LoggerFactory.getLogger(DigitalUtil.class); /** * 分割數據 * @param digit * @return */ public static List<Integer> divideDigit(int digit) { List<Integer> digits = new ArrayList<Integer>(); return recurseDivide(digit, digits); } /** * 遞歸分割數據 * @param digit * @param digits * @return */ public static List<Integer> recurseDivide(int digit, List<Integer> digits) { int result = digit % 10; digits.add(result); int sub = digit / 10; if(sub != 0) { recurseDivide(sub, digits); } return digits; } /** * * @return */ public static List<String> getDigitalUnits() { List<String> units = new ArrayList<String>(); units.add("十"); units.add("百"); units.add("千"); units.add(""); units.add("十"); units.add("百"); units.add("千"); units.add(""); return units; } public static Map<Integer, String> getDigitalUnitsMap() { Map<Integer, String> units = new HashMap<Integer, String>(); //units.put(2, "十"); //units.put(3, "百"); //units.put(4, "千"); units.put(5, "萬"); units.put(9, "億"); return units; } /** * 數字對應中文數字 * @return */ public static Map<Integer, String> digitToStringMap() { Map<Integer, String> numberMap = new HashMap<Integer, String>(); numberMap.put(0, "零"); numberMap.put(1, "一"); numberMap.put(2, "二"); numberMap.put(3, "三"); numberMap.put(4, "四"); numberMap.put(5, "五"); numberMap.put(6, "六"); numberMap.put(7, "七"); numberMap.put(8, "八"); numberMap.put(9, "九"); //numberMap.put(10, "十"); return numberMap; } /** * 數字對應中文數字 - "0"="〇" * @return */ public static Map<Integer, String> digitToStringMap2() { Map<Integer, String> map = digitToStringMap(); map.put(0, "〇"); return map; } /** * 數字年份轉換爲中文年份 * @param year * @return */ public static String converYearToString(int year) { Map<Integer, String> defaultMap = digitToStringMap(); return converYearToString(year, defaultMap); } /** * 數字年份轉換爲中文年份 * @param year * @param digitToStringMap * @return */ public static String converYearToString(int year, Map<Integer, String> digitToStringMap) { // 分割數字 List<Integer> digits = divideDigit(year); StringBuffer buff = new StringBuffer(); for(int i=digits.size()-1; i>=0; i--) { String str = digitToStringMap.get(digits.get(i)); if(StringUtils.isBlank(str)) { str = String.valueOf(digits.get(i)); } buff.append(str); } return buff.toString(); } /** * 將數字轉換爲中文 * @param digit * @return */ public static String converDigitToString(int digit) { // 數字對應中文數字 Map<Integer, String> digitToStringMap = digitToStringMap(); // 0直接返回 if(digit == 0) { return digitToStringMap.get(0); } // 分割數字 List<Integer> digits = divideDigit(digit); // 數字單位 List<String> units = getDigitalUnits(); Map<Integer, String> unitMaps = getDigitalUnitsMap(); // 計算數字尾部0個數 int zoreAmount = calZoreDigitAmountTail(digit); // 是否爲0標識 boolean isZeroPrevious = false; StringBuffer buff = new StringBuffer(); for(int i=digits.size()-1; i>=zoreAmount; i--) { String str = digitToStringMap.get(digits.get(i)); if(StringUtils.isBlank(str)) { str = String.valueOf(digits.get(i)); } if(digits.get(i) == 0 ) { if(i!=0 && !isZeroPrevious && !unitMaps.containsKey(i+1)) { // 不是最後一位數字,前面數字非0 buff.append(str); isZeroPrevious = true; } else { } } else { isZeroPrevious = false; buff.append(str); } if(i>0 && !isZeroPrevious) { String unit = units.get(i-1)==null?"":units.get(i-1); buff.append(unit); } // 分隔符,5位:萬分隔,9位:億分隔 String digitUnit = unitMaps.get(i+1)==null?"":unitMaps.get(i+1); buff.append(digitUnit); } //TODO String result = buff.toString().replace("一十", "十"); return result; } /** * 計算數字尾部0個數 * @param digit * @return */ public static int calZoreDigitAmountTail(int digit) { int amount = 0; int mod = digit % 10; while(mod == 0) { amount ++; digit = digit / 10; mod = (digit) % 10; } return amount; } }