日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java实现中文数字与阿拉伯数字互相转换

發(fā)布時(shí)間:2023/12/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java实现中文数字与阿拉伯数字互相转换 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近在作東西的時(shí)候,需要使用中文數(shù)字與阿拉伯?dāng)?shù)字進(jìn)行互相轉(zhuǎn)換.在網(wǎng)搜了一下效果并不是十分理想.沒有辦法只好自己動(dòng)手.

??? 現(xiàn)在拿出來與大家分享,并不斷完善.

?

需要注意的一些地方:

1.??? 目前最大上限是以億為單位.

2.??? 沒有實(shí)現(xiàn)中文大寫錢數(shù)的互換.

3.??? 實(shí)用的是int型數(shù)字,這樣上限大概是以十億為單位.

4.??? 有些中文的數(shù)字習(xí)慣沒有處理(“4億”=“4萬萬”,“一十一”=“十一”,“零”=“0”等等)

?

Java代碼如下

?

/**

?*

?*

?*

?*@author<a href="yzy0612@163.com">yangzhenyu</a>

?*

?*@version$Revision$

?*

?*@since2010-8-26

?*/

publicclass NumberUtils {

??????

??? /*

??? ?* 基本數(shù)字單位;

??? ?*/

??? privatestaticfinal String[] units =

?????? { "", "", "", "" };// 個(gè)位

???

??? /*

??? ?* 大數(shù)字單位;

??? ?*/

??? privatestaticfinal String[] bigUnits =

?????? { "", "" };

???

??? /*

??? ?* 中文數(shù)字;

??? ?*/

??? privatestaticfinalchar[] numChars =

?????? { '', '', '', '', '', '', '', '', '' };

???

//? private static final char[] numMouneyChars =

//???? { '', '', '', '', '', '', '', '', '' };

???

??? privatestaticcharnumZero = '';

???

??? /**

??? ?*將中文數(shù)字轉(zhuǎn)換為阿拉伯?dāng)?shù)字;

??? ?*

??? ?*@paramnumberCN

??? ?*@return

??? ?*/

??? publicstaticint numberCN2Arab(String numberCN) {

??????

?????? String tempNumberCN = numberCN;

??????

?????? // 異常數(shù)據(jù)處理;

?????? if (tempNumberCN == null) {

?????????? return 0;

?????? }

??????

?????? /*

?????? ?* nums[0] 保存以千單位; nums[1] 保存以萬單位; nums[2] 保存以億單位;

?????? ?*/

?????? String[] nums = new String[bigUnits.length + 1];

??????

?????? //千位以內(nèi),直接處理;

?????? nums[0] = tempNumberCN;

??????

?????? /*

?????? ?* 分割大數(shù)字,以千為單位進(jìn)行運(yùn)算;

?????? ?*/

?????? for (int i = (bigUnits.length - 1); i >= 0; i--) {

??????????

?????????? // 是否存在大單位(,...);

?????????? int find = tempNumberCN.indexOf(bigUnits[i]);

??????????

?????????? if (find != -1) {

????????????? String[] tempStrs = tempNumberCN.split(bigUnits[i]);

?????????????

????????????? //清空千位內(nèi)容;

????????????? if (nums[0] != null) {

????????????????? nums[0] = null;

????????????? }

?????????????

????????????? if (tempStrs[0] != null) {

????????????????? nums[i + 1] = tempStrs[0];

????????????? }

?????????????

????????????? if (tempStrs.length > 1) {

????????????????? tempNumberCN = tempStrs[1];

?????????????????

????????????????? if (i == 0) {

???????????????????? nums[0] = tempStrs[1];

????????????????? }

?????????????????

????????????? } else {

????????????????? tempNumberCN = null;

?????????????????

????????????????? break;

????????????? }

?????????? }

?????? }

??????

?????? String tempResultNum = "";

??????

?????? for (int i = nums.length - 1; i >= 0; i--) {

?????????? if (nums[i] != null) {

????????????? tempResultNum += numberKCN2Arab(nums[i]);

?????????? } else {

????????????? tempResultNum += "0000";

?????????? }

?????? }

??????

?????? return Integer.parseInt(tempResultNum);

??? }

???

??? /**

??? ?*將一位中文數(shù)字轉(zhuǎn)換為一位數(shù)字;eg:返回1;

??? ?*

??? ?*@paramonlyCNNumber

??? ?*@return

??? ?*/

??? publicstaticint numberCharCN2Arab(char onlyCNNumber) {

??????

?????? if (numChars[0] == onlyCNNumber) {

?????????? return 1;

?????? } elseif (numChars[1] == onlyCNNumber || onlyCNNumber == '') {// 處理中文習(xí)慣用法(,)

?????????? return 2;

?????? } elseif (numChars[2] == onlyCNNumber) {

?????????? return 3;

?????? } elseif (numChars[3] == onlyCNNumber) {

?????????? return 4;

?????? } elseif (numChars[4] == onlyCNNumber) {

?????????? return 5;

?????? } elseif (numChars[5] == onlyCNNumber) {

?????????? return 6;

?????? } elseif (numChars[6] == onlyCNNumber) {

?????????? return 7;

?????? } elseif (numChars[7] == onlyCNNumber) {

?????????? return 8;

?????? } elseif (numChars[8] == onlyCNNumber) {

?????????? return 9;

?????? }

??????

?????? return 0;

??? }

???

??? /**

??? ?*將一位數(shù)字轉(zhuǎn)換為一位中文數(shù)字;eg:1返回;

??? ?*

??? ?*@paramonlyArabNumber

??? ?*@return

??? ?*/

??? publicstaticchar numberCharArab2CN(char onlyArabNumber) {

??????

?????? if (onlyArabNumber == '0') {

?????????? returnnumZero;

?????? }

??????

?????? if (onlyArabNumber > '0' && onlyArabNumber <= '9') {

?????????? returnnumChars[onlyArabNumber - '0' - 1];

?????? }

??????

?????? return onlyArabNumber;

??? }

???

??? /**

??? ?*

??? ?*@paramnum

??? ?*@return

??? ?*/

??? publicstatic String numberArab2CN(Integer num) {

??????

?????? String tempNum = num + "";

??????

?????? // 傳說中的分頁算法;

?????? int numLen = tempNum.length();

?????? int start = 0;

?????? int end = 0;

?????? int per = 4;

?????? int total = (int) ((numLen + per - 1) / per);

?????? int inc = numLen % per;

??????

?????? /*

?????? ?* 123,1234,1234 四位一段,進(jìn)行處理;

?????? ?*/

?????? String[] numStrs = new String[total];

??????

?????? for (int i = total - 1; i >= 0; i--) {

?????????? start = (i - 1) * per + inc;

??????????

?????????? if (start < 0) {

????????????? start = 0;

?????????? }

??????????

?????????? end = i * per + inc;

??????????

?????????? numStrs[i] = tempNum.substring(start, end);

?????? }

??????

?????? String tempResultNum = "";

??????

?????? int rempNumsLen = numStrs.length;

?????? for (int i = 0; i < rempNumsLen; i++) {

??????????

?????????? // 小于1000補(bǔ)零處理;

?????????? if (i > 0 && Integer.parseInt(numStrs[i]) < 1000) {

????????????? tempResultNum += numZero

???????????????????? + numberKArab2CN(Integer.parseInt(numStrs[i]));

?????????? } else {

????????????? tempResultNum += numberKArab2CN(Integer.parseInt(numStrs[i]));

?????????? }

??????????

?????????? // 加上單位(,....)

?????????? if (i < rempNumsLen - 1) {

????????????? tempResultNum += bigUnits[rempNumsLen - i - 2];

?????????? }

??????????

?????? }

??????

?????? // 去掉未位的零

?????? tempResultNum = tempResultNum.replaceAll(numZero + "$", "");

??????

?????? return tempResultNum;

??? }

???

??? /**

??? ?*將千以內(nèi)的數(shù)字轉(zhuǎn)換為中文數(shù)字;

??? ?*

??? ?*@paramnum

??? ?*@return

??? ?*/

??? privatestatic String numberKArab2CN(Integer num) {

??????

?????? char[] numChars = (num + "").toCharArray();

??????

?????? String tempStr = "";

??????

?????? int inc = units.length - numChars.length;

??????

?????? for (int i = 0; i < numChars.length; i++) {

?????????? if (numChars[i] != '0') {

????????????? tempStr += numberCharArab2CN(numChars[i]) + units[i + inc];

?????????? } else {

????????????? tempStr += numberCharArab2CN(numChars[i]);

?????????? }

?????? }

??????

?????? // 將連續(xù)的零保留一個(gè)

?????? tempStr = tempStr.replaceAll(numZero + "+", numZero + "");

??????

?????? // 去掉未位的零

?????? tempStr = tempStr.replaceAll(numZero + "$", "");

??????

?????? return tempStr;

??????

??? }

???

??? /**

??? ?*處理千以內(nèi)中文數(shù)字,返回4位數(shù)字字符串,位數(shù)不夠以"0"補(bǔ)齊;

??? ?*

??? ?*@paramnumberCN

??? ?*@return

??? ?*/

??? privatestatic String numberKCN2Arab(String numberCN) {

??????

?????? if ("".equals(numberCN)) {

?????????? return"";

?????? }

??????

?????? int[] nums = newint[4];

??????

?????? if (numberCN != null) {

??????????

?????????? for (int i = 0; i < units.length; i++) {

????????????? int idx = numberCN.indexOf(units[i]);

?????????????

????????????? if (idx > 0) {

????????????????? char tempNumChar = numberCN.charAt(idx - 1);

?????????????????

????????????????? int tempNumInt = numberCharCN2Arab(tempNumChar);

?????????????????

????????????????? nums[i] = tempNumInt;

????????????? }

?????????? }

??????????

?????????? // 處理十位

?????????? char ones = numberCN.charAt(numberCN.length() - 1);

?????????? nums[nums.length - 1] = numberCharCN2Arab(ones);

??????????

?????????? // 處理個(gè)位

?????????? if ((numberCN.length() == 2 || numberCN.length() == 1)

????????????????? && numberCN.charAt(0) == '') {

????????????? nums[nums.length - 2] = 1;

?????????? }

?????? }

??????

?????? // 返回結(jié)果

?????? String tempNum = "";

?????? for (int i = 0; i < nums.length; i++) {

?????????? tempNum += nums[i];

?????? }

??????

?????? return (tempNum);

??? }

}

總結(jié)

以上是生活随笔為你收集整理的java实现中文数字与阿拉伯数字互相转换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。