鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 编程语言开发 > java > >

汉字数字转数字

来源:互联网 作者:佚名 时间:2012-12-23 13:04
为了便于以后重用,现把代码贴出来 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; * 模块: 描述:将汉字数字转换为数字 9 * 李乐 601235723@

  为了便于以后重用,香港服务器服务器空间,现把代码贴出来


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; * 模块: 描述:将汉字数字转换为数字 9 * 李乐 601235723@qq.com ChineseNumber { 13 private ChineseNumber() { 14 } Pattern CHN_NUM_PATTERN = Pattern.compile("[一二三四五六七八九][十百千]?"); Map<Character, Integer> CHN_UNITS = new HashMap<Character, Integer>(); 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 } * 将小于一万的汉字数字,转换为BigInteger 38 * chnNum 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 } * 将汉字转换为数字 59 * num 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 }

 

服务器空间
网友评论
<