java中文数字转换成阿拉伯数字
发布日期:2021-06-29 15:24:32
浏览次数:3
分类:技术文章
本文共 3961 字,大约阅读时间需要 13 分钟。
import java.util.HashMap; import java.util.Map; /** * a class to deal with Chinese numeric. <br /> * * @author chenxin {@link http://www.webssky.com} */ public class CNNMFilter { /** * chinese numeric chars. <br /> * i have put the chars into the lexicon file lex-cn-numeric.lex for the old * version. <r /> it's better to follow the current work. */ private static final Character[] CN_NUMERIC = { '一', '二', '三', '四', '五', '六', '七', '八', '九', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖', '十', '百', '千', '拾', '佰', '仟', '万', '亿', '○', 'O', '零' }; private static Map<Character, Integer> cnNumeric = null; static { cnNumeric = new HashMap<Character, Integer>(40, 0.85f); for (int j = 0; j < 9; j++) cnNumeric.put(CN_NUMERIC[j], j + 1); for (int j = 9; j < 18; j++) cnNumeric.put(CN_NUMERIC[j], j - 8); cnNumeric.put('两', 2); cnNumeric.put('十', 10); cnNumeric.put('拾', 10); cnNumeric.put('百', 100); cnNumeric.put('佰', 100); cnNumeric.put('千', 1000); cnNumeric.put('仟', 1000); cnNumeric.put('万', 10000); cnNumeric.put('亿', 100000000); } /** * check the given char is chinese numeric or not. <br /> * * @param c * <br /> * @return boolean true yes and false for not. */ public static int isCNNumeric(char c) { Integer i = cnNumeric.get(c); if (i == null) return -1; return i.intValue(); } /** * a static method to turn the Chinese numeric to Arabic numbers. * * @param cnn * @param boolea * flag * @return int */ public static int cnNumericToArabic(String cnn, boolean flag) { cnn = cnn.trim(); if (cnn.length() == 1) return isCNNumeric(cnn.charAt(0)); if (flag) cnn = cnn.replace('佰', '百').replace('仟', '千').replace('拾', '十') .replace('零', ' ').replace("元", ""); // System.out.println(cnn); int yi = -1, wan = -1, qian = -1, bai = -1, shi = -1; int val = 0; yi = cnn.lastIndexOf('亿'); if (yi > -1) { val += cnNumericToArabic(cnn.substring(0, yi), false) * 100000000; if (yi < cnn.length() - 1) cnn = cnn.substring(yi + 1, cnn.length()); else cnn = ""; if (cnn.length() == 1) { int arbic = isCNNumeric(cnn.charAt(0)); if (arbic <= 10) val += arbic * 10000000; cnn = ""; } } wan = cnn.lastIndexOf('万'); if (wan > -1) { val += cnNumericToArabic(cnn.substring(0, wan), false) * 10000; if (wan < cnn.length() - 1) cnn = cnn.substring(wan + 1, cnn.length()); else cnn = ""; if (cnn.length() == 1) { int arbic = isCNNumeric(cnn.charAt(0)); if (arbic <= 10) val += arbic * 1000; cnn = ""; } } qian = cnn.lastIndexOf('千'); if (qian > -1) { val += cnNumericToArabic(cnn.substring(0, qian), false) * 1000; if (qian < cnn.length() - 1) cnn = cnn.substring(qian + 1, cnn.length()); else cnn = ""; if (cnn.length() == 1) { int arbic = isCNNumeric(cnn.charAt(0)); if (arbic <= 10) val += arbic * 100; cnn = ""; } } bai = cnn.lastIndexOf('百'); if (bai > -1) { val += cnNumericToArabic(cnn.substring(0, bai), false) * 100; if (bai < cnn.length() - 1) cnn = cnn.substring(bai + 1, cnn.length()); else cnn = ""; if (cnn.length() == 1) { int arbic = isCNNumeric(cnn.charAt(0)); if (arbic <= 10) val += arbic * 10; cnn = ""; } } shi = cnn.lastIndexOf('十'); if (shi > -1) { if (shi == 0) val += 1 * 10; else val += cnNumericToArabic(cnn.substring(0, shi), false) * 10; if (shi < cnn.length() - 1) cnn = cnn.substring(shi + 1, cnn.length()); else cnn = ""; } cnn = cnn.trim(); for (int j = 0; j < cnn.length(); j++) val += isCNNumeric(cnn.charAt(j)) * Math.pow(10, cnn.length() - j - 1); return val; } public static int qCNNumericToArabic(String cnn) { int val = 0; cnn = cnn.trim(); for (int j = 0; j < cnn.length(); j++) val += isCNNumeric(cnn.charAt(j)) * Math.pow(10, cnn.length() - j - 1); return val; } /* * public static void main(String[] args) { ADictionary.isCNNumeric('一'); * int val = 0; long s = System.nanoTime(); //val = * cnNumericToArabic("三亿二千零六万七千五百六", true); //val = * cnNumericToArabic("一九九八", true); long e = System.nanoTime(); * System.out.format("Done["+val+"], cost: %.5fsec\n", ((float)(e - s)) / * 1E9); } */ } // 该代码片段来自于: http://www.sharejs.com/codes/java/5577转载地址:https://codegg.blog.csdn.net/article/details/49740523 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月10日 23时06分07秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Cause: couldn‘t make a guess for 解决方法
2019-04-29
小米手机相册选取后的intent为空?
2019-04-29
Android SurfaceView预览相机黑屏问题解决方案
2019-04-29
Android HTTP 设置UA(User-Agent)及自定义
2019-04-29
写给大忙人看的操作系统
2019-04-29
聊聊这道【快手】面试题
2019-04-29
30多岁程序员老W,无奈选择转行!问题出在哪?
2019-04-29
Java 的序列化和反序列化,你该知道得更多
2019-04-29
什么?搞不定Kafka重复消费?
2019-04-29
聊聊计算和存储分离
2019-04-29
漫画:骚操作系列(灯泡开关的经典面试题)
2019-04-29
原创 | CRUD更要知道的Spring事务传播机制
2019-04-29
分布式系统选主怎么玩
2019-04-29
架构设计|异步请求如何同步处理?
2019-04-29
Kafka的生产者优秀架构设计
2019-04-29
【独家】IT自由职业者是怎么样的感受和体验
2019-04-29