數(shù)字轉(zhuǎn)換中文
作者:張勇波
博主發(fā)表的文章,有的是自己原創(chuàng),有的是這些年本人從網(wǎng)上積累的,方便大家學(xué)習(xí)。
- import java.util.Arrays;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * 數(shù)字轉(zhuǎn)中文,***為千億
- */
- public class NumTotring {
- public static void main(String[] args) {
- String a[] = { "129830200000", "12983020000", "1298302000",
- "129830200", "23000042", "2000042", "100345", "23864", "1000",
- "1234", "123", "23", "5", "20000000", "10086", "10010" };
- for (int i = 0; i < a.length; i++) {
- System.out.println("原數(shù)字為:" + a[i] + "切換后的讀法為:" + readChinese(Long.parseLong(a[i])));
- }
- }
- //處理0、1、2……9的中文讀法的
- private static Map<Integer, String> numberStringMap = new HashMap<Integer, String>();
- //10進制的讀法
- private static Map<Integer, String> base10StringMap = new HashMap<Integer, String>();
- static {
- numberStringMap.put(0, "零");
- numberStringMap.put(1, "壹");
- numberStringMap.put(2, "貳");
- numberStringMap.put(3, "叁");
- numberStringMap.put(4, "肆");
- numberStringMap.put(5, "伍");
- numberStringMap.put(6, "陸");
- numberStringMap.put(7, "柒");
- numberStringMap.put(8, "捌");
- numberStringMap.put(9, "玖");
- base10StringMap.put(1, "");
- base10StringMap.put(2, "十");
- base10StringMap.put(3, "百");
- base10StringMap.put(4, "千");
- base10StringMap.put(5, "萬");
- }
- private static String readChinese(long a) {
- String intString = a + "";
- char ichar[] = intString.toCharArray();
- char icharrevert[] = revertCharArray(ichar);
- int i = 0;
- String result = "";
- while (i < icharrevert.length) {
- int j=i + 4 < icharrevert.length ? i + 4 : icharrevert.length;
- char[] icharsplit = Arrays.copyOfRange(icharrevert, i, j);
- result = processSplitedNumber(icharsplit, (i + 1) / 4) + result;
- i = i + 4;
- }
- return result;
- }
- /**
- * 將得到的數(shù)組倒排,這樣做原因是因為讀的時候從前往后讀, 位數(shù)前面的高
- */
- private static char[] revertCharArray(char[] ichar) {
- char icharNew[] = new char[ichar.length];
- for (int i = ichar.length - 1, j = 0; i >= 0 && j < ichar.length; i--, j++) {
- icharNew[j] = ichar[i];
- }
- return icharNew;
- }
- private static String processSplitedNumber(char[] num, int time) {
- StringBuffer sb = new StringBuffer();
- for (int i = num.length - 1; i >= 0; i--) {
- if (num[i] == '0') {
- //當(dāng)前數(shù)字是0.并且是***一位,直接不讀
- if (i == 0) {
- continue;
- }
- //當(dāng)前數(shù)字是0,下一個數(shù)字不是0,補一個0上去讀
- if (num[i - 1] != '0') {
- sb.append(numberStringMap.get(Integer.valueOf(num[i] + "")));
- } else {
- continue;
- }
- } else {
- //如果當(dāng)前位數(shù)不是0,那就正常的讀出數(shù)字和位
- sb.append(numberStringMap.get(Integer.valueOf(num[i] + "")));
- sb.append(base10StringMap.get(i + 1));
- }
- }
- if (time == 0) {
- } else if (time == 1) {
- sb.append("萬");
- } else if (time == 2) {
- sb.append("億");
- }
- return sb.toString();
- }
- }
- 原數(shù)字為:129830200000切換后的讀法為:壹千貳百玖十捌億叁千零貳十萬
- 原數(shù)字為:12983020000切換后的讀法為:壹百貳十玖億捌千叁百零貳萬
- 原數(shù)字為:1298302000切換后的讀法為:壹十貳億玖千捌百叁十萬貳千
- 原數(shù)字為:129830200切換后的讀法為:壹億貳千玖百捌十叁萬零貳百
- 原數(shù)字為:23000042切換后的讀法為:貳千叁百萬零肆十貳
- 原數(shù)字為:2000042切換后的讀法為:貳百萬零肆十貳
- 原數(shù)字為:100345切換后的讀法為:壹十萬零叁百肆十伍
- 原數(shù)字為:23864切換后的讀法為:貳萬叁千捌百陸十肆
- 原數(shù)字為:1000切換后的讀法為:壹千
- 原數(shù)字為:1234切換后的讀法為:壹千貳百叁十肆
- 原數(shù)字為:123切換后的讀法為:壹百貳十叁
- 原數(shù)字為:23切換后的讀法為:貳十叁
- 原數(shù)字為:5切換后的讀法為:伍
- 原數(shù)字為:20000000切換后的讀法為:貳千萬
- 原數(shù)字為:10086切換后的讀法為:壹萬零捌十陸
- 原數(shù)字為:10010切換后的讀法為:壹萬零壹十
【本文是51CTO專欄作者張勇波的原創(chuàng)文章,轉(zhuǎn)載請通過51CTO獲取作者授權(quán)】
責(zé)任編輯:武曉燕
來源:
上下求索的Z先生博客