在有些实际场景中,我们有时候需要把阿拉伯数字转为中文数字。在中文数字里,我们习惯说十,不说一十,习惯说十一,不说一十一,所以在代码里需要把这一口语习惯考虑进去。另外,我们习惯说一千零一 ,不说一千零零一,在代码里也需要考虑这些。具体代码如下:
1.工具类
package com.mayi1203.myproject.util;
/**
* 阿拉伯数字转中文数字工具类,只考虑1到99999的转换。
* @author 码蚁1203
* @date 2020年4月5日
*/
public final class NumberUtils {
public static final String[] CHINESE_NUMBERS = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
public static final String[] CHINESE_NUMBER_UNIT = {"十", "百", "千", "万"};
public static final String BLANK_STRING = "";
public static final String ArabicToChinese(int number) {
if(number > 99999 || number < 1) {
return BLANK_STRING;
}
String source = String.valueOf(number);
String result = BLANK_STRING;
int length = source.length();
for(int i = 0; i < length; i++) {
int chineseNumber = source.charAt(i) - '0';
int len = result.length();
if(i == 0 && chineseNumber == 1 && length == 2) {
result += CHINESE_NUMBER_UNIT[0];
}else if(i != length - 1 && chineseNumber != 0) {
result += CHINESE_NUMBERS[chineseNumber] + CHINESE_NUMBER_UNIT[length - i - 2];
}else if(i == length - 1 && chineseNumber != 0) {
result += CHINESE_NUMBERS[chineseNumber];
}else if(i != length - 1 && chineseNumber == 0
&& !result.substring(len - 1, len).equals(CHINESE_NUMBERS[chineseNumber])) {
result += CHINESE_NUMBERS[chineseNumber];
}
}
return result;
}
}
2.测试类
2.1 测试单个数字
package com.mayi1203.myproject.util;
/**
* 测试类
* @author 码蚁1203
* @date 2020年4月5日
*/
public class Test {
public static void main(String[] args) {
int number = 1;
System.out.println(NumberUtils.ArabicToChinese(number));
}
}
打印结果:
一
2.2 测试十
package com.mayi1203.myproject.util;
/**
* 测试类
* @author 码蚁1203
* @date 2020年4月5日
*/
public class Test {
public static void main(String[] args) {
int number = 10;
System.out.println(NumberUtils.ArabicToChinese(number));
}
}
打印结果:
十
2.3 测试三个数字
package com.mayi1203.myproject.util;
/**
* 测试类
* @author 码蚁1203
* @date 2020年4月5日
*/
public class Test {
public static void main(String[] args) {
int number = 101;
System.out.println(NumberUtils.ArabicToChinese(number));
}
}
打印结果:
一百零一
2.4 测试四个数字
package com.mayi1203.myproject.util;
/**
* 测试类
* @author 码蚁1203
* @date 2020年4月5日
*/
public class Test {
public static void main(String[] args) {
int number = 1001;
System.out.println(NumberUtils.ArabicToChinese(number));
}
}
打印结果:
一千零一
2.5 测试五个数字
package com.mayi1203.myproject.util;
/**
* 测试类
* @author 码蚁1203
* @date 2020年4月5日
*/
public class Test {
public static void main(String[] args) {
int number = 99009;
System.out.println(NumberUtils.ArabicToChinese(number));
}
}
打印结果:
九万九千零九