java中文数字转换成阿拉伯数字
发布日期:2021-06-29 15:24:32
浏览次数:2
分类:技术文章
本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年05月02日 17时17分11秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
火爆知乎的Android面试题-Android-App的设计架构经验谈,大厂内部资料
2019-04-29
看完直接怼产品经理!Android多进程从头讲到尾,跳槽薪资翻倍
2019-04-29
快速从入门到精通!面试的时候突然遇到答不上的问题怎么办?已拿到offer
2019-04-29
Android开发知识体系!腾讯+字节+阿里面经真题汇总,成功入职阿里
2019-04-29
android开发语言!大厂经典高频面试题体系化集合,移动架构师成长路线
2019-04-29
typescript学习(进阶)
2019-04-29
三天敲一个前后端分离的员工管理系统
2019-04-29
axios请求携带cookie实现跨域(后端springsecurity)
2019-04-29
spring data rest 不隐藏主键id
2019-04-29
后端传来json数据,vue前端如何渲染??
2019-04-29
vue 增删改数据实时更新
2019-04-29
手敲一个前后端分离项目——成果演示
2019-04-29
Linux——基础命令篇
2019-04-29
-jsp-
2019-04-29
EL表达式、JSTL标签库、文件上传和下载
2019-04-29
Cookie、Session
2019-04-29
表单重复提交
2019-04-29
Filter
2019-04-29
BAT大厂最爱问的Android核心面试百题详细解析!真香
2019-04-29