package com.heke.ftp.test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class ChangeNumberToChinese { private Map<Integer,String> hm; //用来存放大写的中国字体 private Map<String,String> big; private String oddment; /** * 构造函数 */ public ChangeNumberToChinese() { ini(); } /** * * @param s 数字 189608950.25 * @return 中文数字 壹亿捌仟玖佰陆拾万捌仟玖佰伍拾元贰角伍分 */ public String changerToMoney(String s ) { s = s.replace(".", ""); //System.out.println(s); String sl = s.substring(s.length() - 2, s.length()); String sf = s.substring(0, s.length() - 2); sl = oddment(sl); List<String> list = this.analyze(sf); String str = this.changeStyle(this.joinAll(list, this)); for(int i = 0 ; i < 4 ; i++) { str = str.replaceFirst("零佰", "零"); str = str.replaceFirst("零拾", "零"); str = str.replaceFirst("零仟", "零"); str = str.replaceFirst("零万", "万"); str = str.replaceFirst("零亿", "亿"); str = str.replaceFirst("零兆", "兆"); str = str.replaceFirst("零零", "零"); str = str.replaceFirst("零元", "元"); } return str + sl; } /** * * @param s 处理的数据 * @return 编程中文大写数据 */ public String changeStyle(String s ) { while(s.indexOf("亿")!=s.lastIndexOf("亿")) { s = s.replaceFirst("亿", ""); } while(s.indexOf("万")!=s.lastIndexOf("万")) { s = s.replaceFirst("万", ""); } while(s.indexOf("兆")!=s.lastIndexOf("兆")) { s = s.replaceFirst("兆", ""); } return s; } /** * * @param list 集合 * @param ct 改对象 * @return 大写数字初始模型 */ public String joinAll(List<String> list,ChangeNumberToChinese ct) { String s = ""; for(int i = 0 ; i < list.size() ; i ++) { s+=ct.oneBone(list.get(i)); //System.out.println(list.get(i)); } //System.out.println(s); return s + "元"; } /** * * @param s 原始数据 50000 * @return 处理数据 5 10000 */ public String oneBone(String s) { String c = String.valueOf(s.charAt(0)); //第一位置 String sr = "1" + s.substring(1, s.length()); //第二位置 System.out.println(c +"=============" + sr); String str1 = hm.get(Integer.parseInt(c)); String str2 = big.get(sr); if(str2==null) { str2= new String(""); } String sAll = str1 + str2; System.out.println(sAll); return sAll; } /** * * @param s 原始数据 123456 * @return 解析成一个list的对象 变成100000 20000 400 50 6 */ public List<String> analyze(String s) { //现在有11111111111这样的一个字符串传递乐过来 String sp1 = s; String sp2 = sp1; List<String> list = new ArrayList<String>(); for(int i = 0 ; i < sp2.length() ; i++) { char c = sp1.charAt(0); sp1 = sp1.substring(1); String str = c + ""; for(int j = 0 ; j < sp1.length() ; j++) { str += "0"; } list.add(str); } return list; } /** * 对象初始化 */ public void ini() { hm = new HashMap<Integer,String>(); //零壹贰叁肆伍陆柒捌玖 hm.put(0, "零"); hm.put(1, "壹"); hm.put(2, "贰"); hm.put(3, "叁"); hm.put(4, "肆"); hm.put(5, "伍"); hm.put(6, "陆"); hm.put(7, "柒"); hm.put(8, "捌"); hm.put(9, "玖"); big = new HashMap<String,String>(); big.put("10", "拾"); big.put("100", "佰"); big.put("1000", "仟"); big.put("10000", "万"); big.put("100000", "拾万"); big.put("1000000", "佰万"); big.put("10000000", "仟万"); big.put("100000000", "亿"); big.put("1000000000", "拾亿"); big.put("10000000000", "佰亿"); big.put("100000000000", "仟亿"); big.put("1000000000000", "兆"); big.put("10000000000000", "拾兆"); big.put("100000000000000", "佰兆"); big.put("1000000000000000", "仟兆"); } /** * * @param s 小数 25 * @return 中文小数 贰角伍分 */ public String oddment(String s) { String str = s.replace(String.valueOf(s.charAt(0)), hm.get(Integer.parseInt(String.valueOf(s.charAt(0)))) + "角"); //System.out.println(str); str = str.replace(String.valueOf(str.charAt(2)), hm.get(Integer.parseInt(String.valueOf(str.charAt(2)))) + "分"); // System.out.println(str); return str; } }