汉字数字转数字
为了便于以后重用,现把代码贴出来
1 import java.math.BigInteger; 2 import java.util.HashMap; 3 import java.util.Map; 4 import java.util.regex.Matcher; 5 import java.util.regex.Pattern; 6 7 /** 8 * 模块: 描述:将汉字数字转换为数字 9 * 10 * @author 李乐 601235723@qq.com 11 */ 12 public class ChineseNumber { 13 private ChineseNumber() { 14 } 15 16 private static Pattern CHN_NUM_PATTERN = Pattern.compile("[一二三四五六七八九][十百千]?"); 17 private static Map<Character, Integer> CHN_UNITS = new HashMap<Character, Integer>(); 18 private static Map<Character, Integer> CHN_NUMS = new HashMap<Character, Integer>(); 19 static { 20 CHN_UNITS.put('十', 10); 21 CHN_UNITS.put('百', 100); 22 CHN_UNITS.put('千', 1000); 23 CHN_UNITS.put('万', 10000); 24 CHN_UNITS.put('亿', 10000000); 25 CHN_NUMS.put('一', 1); 26 CHN_NUMS.put('二', 2); 27 CHN_NUMS.put('三', 3); 28 CHN_NUMS.put('四', 4); 29 CHN_NUMS.put('五', 5); 30 CHN_NUMS.put('六', 6); 31 CHN_NUMS.put('七', 7); 32 CHN_NUMS.put('八', 8); 33 CHN_NUMS.put('九', 9); 34 } 35 36 /** 37 * 将小于一万的汉字数字,转换为BigInteger 38 * 39 * @param chnNum 40 * @return 41 */ 42 private static BigInteger getNumber(String chnNum) { 43 BigInteger number = BigInteger.valueOf(0); 44 Matcher m = CHN_NUM_PATTERN.matcher(chnNum); 45 m.reset(chnNum); 46 while (m.find()) { 47 String subNumber = m.group(); 48 if (subNumber.length() == 1) { 49 number = number.add(BigInteger.valueOf(CHN_NUMS.get(subNumber.charAt(0)))); 50 } else if (subNumber.length() == 2) { 51 number = number.add(BigInteger.valueOf(CHN_NUMS.get(subNumber.charAt(0))).multiply(BigInteger.valueOf(CHN_UNITS.get(subNumber.charAt(1))))); 52 } 53 } 54 return number; 55 } 56 57 /** 58 * 将汉字转换为数字 59 * 60 * @param num 61 * @return 62 */ 63 public static int parseNumber(String chnNum) { 64 chnNum = chnNum.replaceAll("(?<![一二三四五六七八九])十", "一十").replaceAll("零", ""); 65 Pattern pattern = Pattern.compile("[万亿]"); 66 Matcher m = pattern.matcher(chnNum); 67 BigInteger result = BigInteger.valueOf(0); 68 int index = 0; 69 while (m.find()) { 70 int end = m.end(); 71 int multiple = CHN_UNITS.get(m.group().charAt(0)); 72 String num = chnNum.substring(index, m.start()); 73 result = result.add(getNumber(num)).multiply(BigInteger.valueOf(multiple)); 74 index = end; 75 } 76 String num = chnNum.substring(index); 77 result = result.add(getNumber(num)); 78 return result.intValue(); 79 } 80 }
还有不完善的地方,凑合能用。