汉字数字转数字

  为了便于以后重用,现把代码贴出来


 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 李乐 [email protected]

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 }

 

 还有不完善的地方,凑合能用。

你可能感兴趣的:(数字)