package com.utstar.db.util;/*** 工具类,用于将汉语的数字转换为阿拉伯数字* @author utsc1243* @date 2019年6月12日*/
public class ChineseNumToArabicNumUtil {static char[] cnArr = new char [] {'零','一','二','三','四','五','六','七','八','九'};static char[] chArr = new char [] {'零','十','百','千','万','亿'};static String allChineseNum = "零一二三四五六七八九十百千万亿";static String allArabicNum = "0123456789";static String num1 = "一二三四五六七八九";static String num2 = "十百千万亿";static String zero = "零";/*** 将汉字中的数字转换为阿拉伯数字, 转换纯中文数字,* @param chineseNum* @return*/public static int chineseNumToArabicNum(String chineseNum) {int result = 0;int temp = 1;//存放一个单位的数字如:十万int count = 0;//判断是否有chArrfor (int i = 0; i < chineseNum.length(); i++) {boolean b = true;//判断是否是chArrchar c = chineseNum.charAt(i);for (int j = 0; j < cnArr.length; j++) {if (c == cnArr[j]) {if(0 != count){//添加下一个单位之前,先把上一个单位值添加到结果中result += temp;temp = 1;count = 0;}// 下标,就是对应的值temp = j;b = false;break;}}if(b){//单位{'十','百','千','万','亿'}for (int j = 0; j < chArr.length; j++) {if (c == chArr[j]) {switch (j) {case 0:temp *= 1;break;case 1:temp *= 10;break;case 2:temp *= 100;break;case 3:temp *= 1000;break;case 4:temp *= 10000;break;case 5:temp *= 100000000;break;default:break;}count++;}}}if (i == chineseNum.length() - 1) {//遍历到最后一个字符result += temp;}}return result;}/*** 将字符串中的中文数字转换阿拉伯数字,其它非数字汉字不替换* @param chineseNum* @return*/public static String chineseNumToArabicNumTwo(String chineseNum) {StringBuilder resultStr = new StringBuilder();int tempresult = 0;int temp = 1;//存放一个单位的数字如:十万int count = 0;//判断是否有单位// 重新将 temp, count, tempresult 设置为初始值boolean setInitial = false;// 以十百千万亿结束的在最后加boolean isAdd = false;boolean num1flag = false;boolean num2flag = false;for (int i = 0; i < chineseNum.length(); i++) {if (setInitial) {tempresult = 0;temp = 1;count = 0;setInitial = false;}boolean b = true;//判断是否是chArrchar c = chineseNum.charAt(i);if (allChineseNum.indexOf(c) >= 0) {if (i < chineseNum.length() - 1 && num1.indexOf(c) >= 0 && num1.indexOf(chineseNum.charAt(i+1)) >= 0) {num1flag = true;}for (int j = 0; j < cnArr.length; j++) {if (c == cnArr[j]) {if(0 != count){//添加下一个单位之前,先把上一个单位值添加到结果中tempresult += temp;temp = 1;count = 0;}if (!isAdd && (i == chineseNum.length() - 1|| allChineseNum.indexOf(chineseNum.charAt(i+1)) < 0)) {tempresult += j;setInitial = true;resultStr.append(tempresult);isAdd = true;}// 下标+1,就是对应的值temp = j;b = false;break;}}if (num1flag) {resultStr.append(temp);num1flag = false;setInitial = true;continue;}boolean test = (i < chineseNum.length() - 1 && zero.indexOf(chineseNum.charAt(i+1)) >= 0 )|| (i >0 && zero.indexOf(chineseNum.charAt(i-1)) >= 0);if (i < chineseNum.length() - 1 && zero.indexOf(c) >= 0 && test ) {num2flag = true;}if(b){//单位{'十','百','千','万','亿'}for (int j = 0; j < chArr.length; j++) {if (c == chArr[j]) {switch (j) {case 0:temp *= 1;break;case 1:temp *= 10;break;case 2:temp *= 100;break;case 3:temp *= 1000;break;case 4:temp *= 10000;break;case 5:temp *= 100000000;break;default:break;}count++;}}}if (num2flag) {resultStr.append(temp);num2flag = false;setInitial = true;continue;}if (!isAdd && (i == chineseNum.length() - 1|| allChineseNum.indexOf(chineseNum.charAt(i+1)) < 0)) {tempresult += temp;setInitial = true;resultStr.append(tempresult);isAdd = true;}} else {isAdd = false;resultStr.append(c);}}return resultStr.toString();}/*** 将数字转换为中文数字, 这里只写到了万* @param intInput* @return*/public static String arabicNumToChineseNum(int intInput) {String si = String.valueOf(intInput);String sd = "";if (si.length() == 1) {if (intInput == 0) {return sd;}sd += cnArr[intInput];return sd;} else if (si.length() == 2) {if (si.substring(0, 1).equals("1")) {sd += "十";if (intInput % 10 == 0) {return sd;}}elsesd += (cnArr[intInput / 10] + "十");sd += arabicNumToChineseNum(intInput % 10);} else if (si.length() == 3) {sd += (cnArr[intInput / 100] + "百");if (String.valueOf(intInput % 100).length() < 2) {if (intInput % 100 == 0) {return sd;}sd += "零";}sd += arabicNumToChineseNum(intInput % 100);} else if (si.length() == 4) {sd += (cnArr[intInput / 1000] + "千");if (String.valueOf(intInput % 1000).length() < 3) {if (intInput % 1000 == 0) {return sd;}         sd += "零";}sd += arabicNumToChineseNum(intInput % 1000);} else if (si.length() == 5) {sd += (cnArr[intInput / 10000] + "万");if (String.valueOf(intInput % 10000).length() < 4) {if (intInput % 10000 == 0) {return sd;}sd += "零";}sd += arabicNumToChineseNum(intInput % 10000);}return sd;}/*** 判断传入的字符串是否全是汉字数字* @param chineseStr* @return*/public static boolean isChineseNum(String chineseStr) {char [] ch = chineseStr.toCharArray();for (char c : ch) {if (!allChineseNum.contains(String.valueOf(c))) {return false;}}return true;}/*** 判断数字字符串是否是整数字符串* @param str* @return*/public static boolean isNum(String str) {String reg = "[0-9]+";return str.matches(reg);}public static void main(String[] args) {System.out.println(chineseNumToArabicNumTwo("一千零一夜一千零一夜"));System.out.println(chineseNumToArabicNumTwo("五百七十九"));System.out.println(chineseNumToArabicNumTwo("一万零五百七十九"));System.out.println(chineseNumToArabicNumTwo("一万零七十九"));System.out.println(chineseNumToArabicNumTwo("一万零五百零九"));System.out.println(chineseNumToArabicNumTwo("十二传说"));System.out.println(chineseNumToArabicNumTwo("十二传说二"));System.out.println(chineseNumToArabicNumTwo("一百五十级"));System.out.println(chineseNumToArabicNumTwo("十二传说第一百五十级"));System.out.println(chineseNumToArabicNumTwo("十月围城"));System.out.println(chineseNumToArabicNumTwo("百变星君"));System.out.println(chineseNumToArabicNumTwo("零零七"));System.out.println(chineseNumToArabicNumTwo("九九八十一"));System.out.println(chineseNumToArabicNumTwo("一九三七"));System.out.println(arabicNumToChineseNum(3059));}
}

阿拉伯数字 和汉字的相互转换相关推荐

  1. Vue中阿拉伯数字与汉字的相互转换

    阿拉伯数字转汉字: numberfilter (num) {const changeNum = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'] / ...

  2. 阿拉伯数字 转 汉字大写

    参考 算法的乐趣 阿拉伯数字 转 汉字大写   如 123 > 壹佰贰拾叁 思路: 如:a = 123,1234,1200 按权位分为 {"","拾",& ...

  3. 阿拉伯数字转换为汉字大写数字

    阿拉伯数字转换为汉字大写数字: 首先需要建立两个视图: create view V_HZNumber as     SELECT 0 F1,'零' F2,'个' F3 UNION     SELECT ...

  4. # 去掉开头数字_阿拉伯数字转汉字

    最近看到一个笔试题,阿拉伯数字和汉字数字的互相转化,网上比较多的是python和java的实现,这里对C++的实现做了整理和改动. 要实现的功能是将正整数转成汉字数字,忽略小数部分(小数部分就是一对一 ...

  5. 迅飞语音数字匹配阿拉伯数字或汉字

    1. 说明 最近项目需求中集成了迅飞语音听写功能,遇到一个问题:比如说:"一百个商品",返回的文字为大写汉字,而不是"100个商品",项目中需要的是阿拉伯数字, ...

  6. php阿拉伯数字转汉字,php 阿拉伯数字转中文汉字

    php 阿拉伯数字转中文汉字 1.[代码]php 阿拉伯数字转中文汉字 //去掉数字段前面的0 function del0($num){ return "".intval($num ...

  7. 实现Unicode和汉字的相互转换

    <title>汉字和Unicode编码互转</title> <script Language=Javascript> var classObj= { ToUnico ...

  8. 经典Java题目:输入一个数字,输出它的大写汉字(阿拉伯数字转汉字)

    写在前面 无意间看到一个Java题目,觉得挺有意思,就拿出来和大家分享: 输入一个数字,输出它的大写汉字. 就像这样: 这算是一个有趣的题目了.但是早前我Java基础特别差就没能实现它. 当然,这次我 ...

  9. 人民币大小写转换(阿拉伯数字和汉字转换)

    最近在网上看到一个关于数字转换人民币大写的算法的一篇博客,很好,就收藏了,算法直接copy原作者的.自己做了一点小改动: 1.以CString代替,封装成类. 2.修复超过"亿"时 ...

最新文章

  1. C# 温故而知新:Stream篇(七)
  2. MFC控件(7):Split Button
  3. Linux samba的配置和使用
  4. GUI编程tkinter模块常用参数(python3)
  5. 二分的思想在算法中体现
  6. 「小程序JAVA实战」微信小程序工程结构了解(五)
  7. 【Vue】—计算属性
  8. THUWC2017 随机二分图
  9. Linux多线程同步之相互排斥量和条件变量
  10. BZOJ4998 星球联盟(LCT+双连通分量+并查集)
  11. 在这个学术被国界化的日子,我有点怀念爱因斯坦。
  12. 网红王思聪数字屏保下载
  13. Excel如何快速删除图片背景?
  14. ofo牵手芝麻信用,骑小黄车可以不用押金了
  15. golang-内存管理-GC回收
  16. 用paddleocr识别汉字_基于Paddle的截图OCR文字识别的实现
  17. 如何区分ipad2和ipad3
  18. 兴趣图谱必将重塑社交网络及电子商务
  19. DNF台服每天0点刷新角色创建限制数据库代码
  20. blastn 用于比对短序列

热门文章

  1. iHost 域名解析
  2. 紫光华宇拼音输入法 V6.1 正式版
  3. 【重要】ECG identification
  4. Jmeter随机参数各种搭配
  5. 计算机组装win7实训报告,计算机实训报告范文精选5篇
  6. 成为一名软件测试工程师必备的技能,除了技术还需天赋。。。
  7. dota数据集标注改coco标注
  8. Emwin常用API函数
  9. 异地就医联网进展如何?正式签约定点医疗机构已达数百家
  10. 使用xlsx.js完成Excel批量数据导入