阿拉伯数字 和汉字的相互转换
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));}
}
阿拉伯数字 和汉字的相互转换相关推荐
- Vue中阿拉伯数字与汉字的相互转换
阿拉伯数字转汉字: numberfilter (num) {const changeNum = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'] / ...
- 阿拉伯数字 转 汉字大写
参考 算法的乐趣 阿拉伯数字 转 汉字大写 如 123 > 壹佰贰拾叁 思路: 如:a = 123,1234,1200 按权位分为 {"","拾",& ...
- 阿拉伯数字转换为汉字大写数字
阿拉伯数字转换为汉字大写数字: 首先需要建立两个视图: create view V_HZNumber as SELECT 0 F1,'零' F2,'个' F3 UNION SELECT ...
- # 去掉开头数字_阿拉伯数字转汉字
最近看到一个笔试题,阿拉伯数字和汉字数字的互相转化,网上比较多的是python和java的实现,这里对C++的实现做了整理和改动. 要实现的功能是将正整数转成汉字数字,忽略小数部分(小数部分就是一对一 ...
- 迅飞语音数字匹配阿拉伯数字或汉字
1. 说明 最近项目需求中集成了迅飞语音听写功能,遇到一个问题:比如说:"一百个商品",返回的文字为大写汉字,而不是"100个商品",项目中需要的是阿拉伯数字, ...
- php阿拉伯数字转汉字,php 阿拉伯数字转中文汉字
php 阿拉伯数字转中文汉字 1.[代码]php 阿拉伯数字转中文汉字 //去掉数字段前面的0 function del0($num){ return "".intval($num ...
- 实现Unicode和汉字的相互转换
<title>汉字和Unicode编码互转</title> <script Language=Javascript> var classObj= { ToUnico ...
- 经典Java题目:输入一个数字,输出它的大写汉字(阿拉伯数字转汉字)
写在前面 无意间看到一个Java题目,觉得挺有意思,就拿出来和大家分享: 输入一个数字,输出它的大写汉字. 就像这样: 这算是一个有趣的题目了.但是早前我Java基础特别差就没能实现它. 当然,这次我 ...
- 人民币大小写转换(阿拉伯数字和汉字转换)
最近在网上看到一个关于数字转换人民币大写的算法的一篇博客,很好,就收藏了,算法直接copy原作者的.自己做了一点小改动: 1.以CString代替,封装成类. 2.修复超过"亿"时 ...
最新文章
- C# 温故而知新:Stream篇(七)
- MFC控件(7):Split Button
- Linux samba的配置和使用
- GUI编程tkinter模块常用参数(python3)
- 二分的思想在算法中体现
- 「小程序JAVA实战」微信小程序工程结构了解(五)
- 【Vue】—计算属性
- THUWC2017 随机二分图
- Linux多线程同步之相互排斥量和条件变量
- BZOJ4998 星球联盟(LCT+双连通分量+并查集)
- 在这个学术被国界化的日子,我有点怀念爱因斯坦。
- 网红王思聪数字屏保下载
- Excel如何快速删除图片背景?
- ofo牵手芝麻信用,骑小黄车可以不用押金了
- golang-内存管理-GC回收
- 用paddleocr识别汉字_基于Paddle的截图OCR文字识别的实现
- 如何区分ipad2和ipad3
- 兴趣图谱必将重塑社交网络及电子商务
- DNF台服每天0点刷新角色创建限制数据库代码
- blastn 用于比对短序列