阿拉伯数字转中文大写和中文小写封装工具类
package com.springboot.entity.utils;
import lombok.extern.slf4j.Slf4j;
/**
* @author maniac
* date:2019/07/14 09:56
* @do 数字转换处理工具类
*/
@Slf4j
public class NumberTransformUtil {
//阿拉伯数字转中文小写,基础数值
private static final String[] BASE_LOW = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
//阿拉伯数字转中文小写,数字权重位
private static final String[] UNIT_LOW = {"", "十", "百", "千", "万", "亿"};
//阿拉伯数字转中文大写,基础数值
private static final String[] BASE_CAP = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
//阿拉伯数字转中文大写,数字权重位
private static final String[] UNIT_CAP = {"", "拾", "佰", "仟", "万", "亿"};
/**
* 转换阿拉伯数字为中文小写(int:0-2147483647)
*
* @param number 数字字符串
* @return 转换后的中文小写字符串 空串为发生转换异常
*/
public static String toLowercaseCh(String number) {
return toChineseNumber(number, BASE_LOW, UNIT_LOW);
}
/**
* 转换阿拉伯数字为中文大写(int:0-2147483647)
*
* @param number 数字字符串
* @return 转换后的中文大写字符串 空串为发生转换异常
*/
public static String toCapitalCh(String number) {
return toChineseNumber(number, BASE_CAP, UNIT_CAP);
}
/**
* 转换阿拉伯数字为中文小写(int:0-99)
*
* @param number 正整数
* @return 中文小写字符串
*/
public static String toLowercaseChWithinHundred(int number) {
if (number < 0) {
return BASE_LOW[0];
} else if (number <= 9) {
return BASE_LOW[number];
} else {
return BASE_LOW[number / 10] + UNIT_LOW[1] + BASE_LOW[number % 10];
}
}
/**
* 转换阿拉伯数字为中文数字
*
* @param number 数字字符串
* @param baseNum 基础数值集合
* @param unitNum 数字权重位集合
* @return 转换后的中文字符串 空串为发生转换异常
*/
private static String toChineseNumber(String number, String[] baseNum, String[] unitNum) {
int num;
try {
num = Integer.parseInt(number);
} catch (Exception e) {
log.info("【数据转换操作】字符串转Int类型出现异常,字符串:{},e:", number, e);
return "";
}
if (num < 0) {
return baseNum[0];
} else if (num <= 9) {
return baseNum[num];
}
if (number.length() <= 4) {
return dealNumberFragment(number, baseNum, unitNum);
} else if (number.length() <= 8) {
String fragmentOne = number.substring(number.length() - 4);
String resultOne = dealNumberFragment(fragmentOne, baseNum, unitNum);
String fragmentTwo = number.substring(0, number.length() - 4);
String resultTwo = dealNumberFragment(fragmentTwo, baseNum, unitNum);
return resultTwo + unitNum[4] + resultOne;
} else {//int 最长为10位数字字符串
String fragmentOne = number.substring(number.length() - 4);
String resultOne = dealNumberFragment(fragmentOne, baseNum, unitNum);
String fragmentTwo = number.substring(number.length() - 8, number.length() - 4);
String resultTwo =
if (!"0000".equals(fragmentTwo)) {//判断是否追加万字
resultTwo = dealNumberFragment(fragmentTwo, baseNum, unitNum)+ unitNum[4];
}else{
if (!"0000".equals(fragmentOne)) {//权重万 为0000 但是0-9999 不为0000 则需补零
resultTwo = baseNum[0];
}
}
String fragmentThree = number.substring(0, number.length() - 8);
String resultThree = dealNumberFragment(fragmentThree, baseNum, unitNum);
return resultThree + unitNum[5] + resultTwo + unitNum[4] + resultOne;
}
}
/**
* 转换阿拉伯数字为中文小写(int:0-9999)
*
* @param number 数字字符串
* @param baseNum 基础数字数组
* @param unitNum 权重数组
* @return 中文字符串
*/
private static String dealNumberFragment(String number, String[] baseNum, String[] unitNum) {
StringBuilder result = new StringBuilder();
int dealNum = Integer.parseInt(number);
boolean preFlag = false;//标识上一个余数是否为0 true 为0 false 不为0
for (int i = number.length() - 1; i >= 0; i--) {
int remainder = dealNum % 10;
dealNum = dealNum / 10;
if (0 == remainder) {//用于处理连续为0的情况
preFlag = true;
} else {
if (preFlag) {//上一个是0 当前不是0
result.insert(0, baseNum[0]);
result.insert(0, baseNum[remainder] + unitNum[number.length() - 1 - i]);
preFlag = false;
} else {
result.insert(0, baseNum[remainder] + unitNum[number.length() - 1 - i]);
preFlag = false;
}
}
}
//补全首位的零 补零操作需放在去零操作的前面解决处理 “0000”情况
if (number.startsWith("0")) {
result.insert(0, baseNum[0]);
}
//去掉末尾的零
if (number.endsWith("0")) {
result.deleteCharAt(result.length() - 1);
}
return result.toString();
}
private NumberTransformUtil() {
}
}
阿拉伯数字转中文大写和中文小写封装工具类相关推荐
- 四、EasyExcel实现Excel读写,封装工具类
在项目中,我们经常用到EasyExcel框架实现:对Excel文件的读写操作.为了方便后续其他项目中的使用,将对Excel文件的读写操作,封装成工具类. 一.EasyExcel实现Excel读写,封装 ...
- JAVA——Okhttp封装工具类
基本概念 OKhttp:一个处理网络请求的开源项目,是安卓端最火热的轻量级框架. Maven <!--OK HTTP Client--><dependency><grou ...
- android文件读取工具类,Android 下读取Assets Properties操作封装工具类
Android 下读取Assets Properties操作封装工具类 发布时间:2018-06-03作者:laosun阅读(2081) 为了方便使用,首先创建BaseApplication类,如下所 ...
- 数据库MySQL基础---JDBC开发步骤--JDBC封装工具类--PreparedStatement实现CRUD操作
JDBC简介 1.JDBC定义Java数据库连接(Java Database Connectivity,简称JDBC):是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询 ...
- JAVA之旅(五)——this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块...
JAVA之旅(五)--this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块 周末收获颇多,继续学习 一.this关键字 用于区分局部变量和成员变量同名的情况 ...
- 如何调用封装工具类调用网上接口查询工作日
如何调用封装工具类调用网上接口查询工作日 这里的编辑器是STS,用的springboot集成环境: 先引进pom.xml依赖包 <?xml version="1.0" enc ...
- 仿京东APP分类页面(mvp模式+OkHttp封装工具类+拦截器+弱引用回收)
仿京东APP分类页面: 添加依赖 compile 'com.android.support:recyclerview-v7:24.0.0' compile 'com.google.code.gson: ...
- Spring Boot 整合 SpringDataNeo4j 并封装工具类解析PathValue
Spring Boot 整合 SpringDataNeo4j 并封装工具类解析PathValue 一.Neo4j 二.Neo4j客户端浏览器 三.maven依赖 四.节点/关系映射 1.NodePer ...
- MySQL JDBC常用知识,封装工具类,时区问题配置,SQL注入问题
JDBC JDBC介绍 Sun公司为了简化开发人员的(对数据库的统一)操作,提供了(Java操作数据库的)规范,俗称JDBC,这些规范的由具体由具体的厂商去做 对于开发人员来说,我们只需要掌握JDBC ...
最新文章
- DNS--3--Master DNS架设
- python单例类命名_单例模式(java/python/c++)
- vs怎么把textbox输入的实数放置变量里_方程的计算机处理96(3)_C++vs
- LeetCode MySQL 1097. 游戏玩法分析 V
- NB-IoT将给智能锁行业带来哪些影响?
- Java多线程学习三十九:CAS 有什么缺点?
- LTI系统对WSS Processes的作用
- ImportError: cannot import name ‘activations‘ from ‘keras.layers‘
- 天地图JS API制作专题图
- 本地文件怎么传到linux服务器,本地文件传到linux服务器
- 支付宝小程序前端开发简介
- vue中的attribute 和 property 是什么意思
- 什么是VHDL?一文带你了解VHDL语言
- ssh mysql 导出excel_使用ssh远程执行命令批量导出数据库到本地(转)
- MongoDB数据迁移之迁移工具Kettle
- Windows11安卓子系统使用贷理登录谷歌框架
- Microsoft Office for Mac 报错
- 提供3Dmax,Zbrush,C4D,MAYA,MD,进来看看
- 2019南京帆软春招
- 【Multisim仿真】CD4017+555流水灯