JAVA 中文汉字转换阿拉伯数字(最终版,已修复了亿及亿以下的汉数字的转换,超过后的数字,暂时不支持)
嘎嘎嘎,大写的尴尬,非常感谢Eliauk_cc-May反馈的bug,代码重新修改啦,鉴于之前过于复杂的逻辑,本次进行了简化
//判断是否为中文数字字符public static List<String> strList = List.of("零", "一", "二", "三", "四", "五", "六", "七", "八", "九");//建立汉字数字零-九对应的阿拉伯数字0-9public static Map<Character, Integer> strMapList = Map.of('零', 0, '一', 1, '二', 2, '三', 3, '四', 4, '五', 5, '六', 6, '七', 7, '八', 8, '九', 9);//建立MAP汉字单位对应的阿拉伯单位public static Map<Character, Integer> numList = Map.of('十', 10, '百', 100, '千', 1000, '万', 10000, '亿', 100000000);/*** 中文数字转换为阿拉伯数字** @param str 需要转换的字符* @return 返回转换信息,为空则返回00* @author motcs* @since 2023-02-06*/private static String convertNumber(String str) {if (isChineseNum(str)) {char[] chars = str.toCharArray();Map<Integer, Integer> strMap = new LinkedHashMap<>();Map<Integer, Integer> numMap = new LinkedHashMap<>();for (int i1 = 0; i1 < chars.length; i1++) {if (strList.contains(String.valueOf(chars[i1]))) {strMap.put(i1, strMapList.get(chars[i1]));} else {if (!ObjectUtils.isEmpty(numMap) && !ObjectUtils.isEmpty(numMap.get(i1 - 1))) {numMap.put(i1 - 1, numMap.get(i1 - 1) * numList.get(chars[i1]));} else {numMap.put(i1 - 1, numList.get(chars[i1]));}if (numList.get(chars[i1]) <= 1000) {for (int i = i1; i < chars.length; i++) {Integer integer = numList.get(chars[i]);if (!ObjectUtils.isEmpty(integer) && integer >= 10000) {numMap.put(i1 - 1, numMap.get(i1 - 1) * numList.get(chars[i]));}}}}}Integer inted = 0;Set<Integer> integers = strMap.keySet();int i1 = integers.size();for (Integer integer : integers) {Integer integer1 = strMap.get(integer);if (!ObjectUtils.isEmpty(numMap) && !ObjectUtils.isEmpty(numMap.get(integer))) {integer1 = integer1 * numMap.get(integer);} else if (ObjectUtils.isEmpty(numMap)) {integer1 = integer1 * (int) Math.pow(10, i1 - 1);i1--;}inted += integer1;}if (inted < 10) {return "0" + inted;}return String.valueOf(inted);}return "00";}
验证是否是纯汉字数字
/*** 判断传入的字符串是否全是汉字数字** @param chineseStr 中文* @return 是否全是中文数字*/public static boolean isChineseNum(String chineseStr) {//判断是否都是中文简写汉字,想要使用繁体的可以自行修改return Stream.of(chineseStr.toCharArray()).noneMatch(c -> strList.contains(String.valueOf(c)));}
该方法支持数据格式:
1.正规的中文汉字数字: 如:一百二十一
2.支持缩写的汉字数字:如: 一五一
JAVA 中文汉字转换阿拉伯数字(最终版,已修复了亿及亿以下的汉数字的转换,超过后的数字,暂时不支持)相关推荐
- 中文汉字转阿拉伯数字
1.中文汉字转阿拉伯数字 参考 思路:地位向高位遍历,每遇到一个数,乘以当前单位,累加在 res 上,遇到单位则改变当前单位 //可以处理十万以下 public class change {publi ...
- 阿里巴巴Java开发手册一周年最终版
阿里巴巴Java开发手册一周年最终版 摘要:阿里巴巴集团推出的<阿里巴巴Java开发手册>是阿里巴巴近万名开发同学集体智慧的结晶,以开发视角为中心,详细列举如何开发更加高效.更加容错.更加 ...
- 苹果描述文件无法连接服务器,教你 game center无法连接服务器解决办法及iOS9.3.2公测版已修复GameCenter无响应bug...
最近看到用户反映苹果游戏中心game center无法连接服务器出现白屏的情况,这是什么原因呢?今天小编就为大家带来解决方法,需要的朋友可以一起看看! 苹果game center白屏或者无法连接服务器 ...
- 短视频点赞平台美化整修最终版【修复后台错误+详细安装教程】
程序介绍 这版短视频点赞平台美化整修最终版[修复后台错误+详细安装教程]也是近来很火爆的一款任务平台,推广佣金.邀请.任务发布提交.任务链接跳转.客服拉起等等全部都是完美,妥妥运营接单的接单运营版本. ...
- Java中文汉字排序
概述 我们在应用程序中可能会经常遇到对中文排序的问题,例如姓名列表,词汇表等等.对中文排序,我们使用比较多的是根据汉语拼音发音来确定顺序. 我们可能会经常使用 java.util.Set接口, jav ...
- Android 中文API合集 最终版,androi中文api合集.doc
androi中文api合集 HYPERLINK "/over140/archive/2011/01/04/1925146.html" Android 中文API合集(3)(83篇) ...
- java中文汉字按英文字母表排序
先部署语言环境 Comparator,类型只能为Object 然后就可以排序或比较 /*** 类名称:cpm.java<br>* 类描述:汉字排序方案3<br>* 要求将汉字以 ...
- Windows ThinPC 最终版已 RTM
微软刚刚宣布其旗下最新的 Windows 产品:Windows ThinPC 已经正式 RTM(eleased to manufacturing),并将于7月1日开始提供给购买了软件保障计划(SA)的 ...
- 简书bug(已修复):网络不佳时安卓1.11.3呈现的空白页面如图
图片发自简书App 图片发自简书App 1.11.3最新内测版已修复上述bug 图片发自简书App
最新文章
- 劣质代码评析——《写给大家看的C语言书(第2版)》附录B之21点程序(一)
- R语言对dataframe进行行数据筛选(row selection)多种方案:使用R原生方法、data.table、dplyr等方案
- 统计计量 | 诺奖得主Angrist的因果推断课程文献读物单子
- benchmark mysql_程序员的MySQL手册(二): 监控与benchmark
- 微信小程序开发--数据绑定
- VTK:相互作用之MouseEvents
- Android开发之RecyclerView之刷新数据notifyDataSetChanged失败的问题
- java 1.6 ubuntu_ubuntu配置 Java SE 1.6
- 360浏览器打不开网页_苹果移动端、PC端safari浏览器打不开网页的解决方案!
- 判断两颗棵二叉树是否相等
- ubuntu-18.04 设置开机启动脚本-亲测有效
- 【系统分析师之路】2020年下系统分析师案例分析真题
- docker 之镜像制作dockerfile
- 计算机ps如何更改数字,ps数字(ps改数字详细步骤)
- java 求梯形面积
- 删除/卸载干净红蜘蛛的.exe和.dll文件
- Python道路之——画自己名字
- 使用云服务器被攻击了怎么办
- 采用circlize包绘制Circos图
- 电脑Tab键有什么功能?分享Tab键的6个妙用