java 对象 转为繁体_Java实现将数字转化为繁体汉字表示
在CSDN論壇上看到了一個帖子,要求用Java實現(xiàn)將數(shù)字轉(zhuǎn)化為繁體漢字表示,如: 輸入一個數(shù)字將其轉(zhuǎn)化為大寫,比如輸入整型1034,得到“壹仟零叁拾肆”。
看了之后感覺挺有意思的,自己也就寫了一個。代碼如下:
/*?實現(xiàn)將數(shù)字轉(zhuǎn)化為繁體漢字表示?? */
import java.util.HashMap;
public class NumberToChinese {
public static void main(String[] args)
{
StringBuffer numberToCn = new StringBuffer();
String number = "-2813040410.0787003560";
HashMap cnHash = getCNHash();
HashMap unitHash = getUnitHash();
String[] partOfNumber = null;
if(number.substring(0, 1).equals("-")) //判斷數(shù)字是否為負(fù)數(shù),并將數(shù)劃分為小數(shù)、整數(shù)兩部分
{
numberToCn.append("負(fù)");
partOfNumber = number.substring(1).split("//.");
}
else
partOfNumber = number.substring(0).split("//.");
if(partOfNumber.length == 1) //如果輸入的數(shù)沒有小數(shù)則只進行整數(shù)部分轉(zhuǎn)化
{
String str = PositiveChangeToCN(partOfNumber[0],cnHash,unitHash);
numberToCn.append(str);
}
else //如輸入的數(shù)有小數(shù),則先轉(zhuǎn)化整數(shù)部分,再轉(zhuǎn)換小數(shù)部分
{
String str = PositiveChangeToCN(partOfNumber[0],cnHash,unitHash); //處理整數(shù)部分
numberToCn.append(str);
numberToCn.append("點");
str = DecimalChangeToCN(partOfNumber[1],cnHash); //處理小數(shù)部分????? numberToCn.append(str); ??}????System.out.println("Number = " + number);??System.out.println("Chinese = " + numberToCn.toString());?}??/**? * 設(shè)置漢字中的數(shù)字表示名稱? * @return? */?public static HashMap getCNHash()?{??HashMap cnHash = new HashMap();??int count = 10;??String[] cnArray = {"零","壹","貳","叁","肆","伍","陸","柒","捌","玖","拾"};????for(int i = 0; i < count; i++)??{???cnHash.put(String.valueOf(i),cnArray[i]);??}??return cnHash;?}??/**? * 設(shè)置漢字中的數(shù)字單位名稱? * @return? */?public static HashMap getUnitHash()?{??HashMap unitHash = new HashMap();??int count = 5;??String[] unitArray = {"拾","佰","仟","萬","億","兆"};????for(int i = 2; i < count+2; i++)??{???unitHash.put(String.valueOf(i),unitArray[i-2]);??}??return unitHash;?}??/**? * 轉(zhuǎn)化數(shù)字小數(shù)部分? * @param numberStr? * @param cnHash? * @return? */?public static String DecimalChangeToCN(String numberStr,HashMap cnHash)?{??? StringBuffer cnStrBuffer = new StringBuffer();??? ??? int zeroNumberAtLast = scanZeroAtLast(numberStr); //轉(zhuǎn)化時除去輸入時小數(shù)部分末尾存在的0??? ?????? //遍歷數(shù)字,轉(zhuǎn)換表示方式及單位??? for(int i = 0; i < numberStr.length() - zeroNumberAtLast; i++)??? {???? String aCnCode = (String)cnHash.get(numberStr.substring(i, i+1));? //轉(zhuǎn)換數(shù)字表示名稱???? cnStrBuffer.append(aCnCode);??? }??? return cnStrBuffer.toString();?}??/**? * 轉(zhuǎn)化數(shù)字正數(shù)部分,按照每四位數(shù)作為一個單元進行轉(zhuǎn)化? * @param numberStr? * @param cnHash? * @param unitHash? * @return? */?private static String PositiveChangeToCN(String numberStr,HashMap cnHash,HashMap unitHash)?{??StringBuffer cnStrBuffer = new StringBuffer();????int changeUnit = 4; //每次轉(zhuǎn)換的位數(shù)范圍??int strLength = numberStr.length(); ??int tempLoopCount = strLength /changeUnit;? ????if(strLength % changeUnit > 0) ???tempLoopCount++;????for (int loop = 1 ; loop <= tempLoopCount; loop++) //每四位數(shù)字為一個單位轉(zhuǎn)換數(shù)字??{????int beginIndex = strLength - (changeUnit * loop);??int endIndex = beginIndex + changeUnit;????if(beginIndex < 0)??{???beginIndex = 0;???endIndex = strLength % changeUnit;??}????String tempStr = numberStr.substring(beginIndex,endIndex); ??int zeroNumberAtLast = scanZeroAtLast(tempStr); //轉(zhuǎn)化時除去輸入時整數(shù)部分末尾存在的0????String aCnCode = new String();????//遍歷數(shù)字,轉(zhuǎn)換表示方式及單位??for(int i = 0; i < tempStr.length() - zeroNumberAtLast; i++)??{???String number = tempStr.substring(i, i+1);????? aCnCode += (String)cnHash.get(number);? //轉(zhuǎn)換數(shù)字表示名稱?????????????? //根據(jù)數(shù)字所在數(shù)中的位置設(shè)置對應(yīng)的單位???if(!number.equals("0")) ???{????int position = tempStr.length() - i; ????if(position > 1)???????? ????? aCnCode += (String)unitHash.get(String.valueOf(position)); //獲取數(shù)字單位名稱(拾、佰、仟)???}??}????if(loop > 1)??{???? aCnCode += (String)unitHash.get(String.valueOf(loop + 3)); //獲取數(shù)字單位名稱(萬、億、兆)??}????cnStrBuffer.insert(0, aCnCode); //合成轉(zhuǎn)換結(jié)果??}????return cnStrBuffer.toString();?}??/**? * 返回正數(shù)部分末尾為0的個數(shù)? * @param numberStr? * @return? */?public static int scanZeroAtLast(String numberStr)?{??int zeroNumberAtLast = 0;??int i = numberStr.length();?????for(; i > 0; i--) //從數(shù)字字符串末尾開始遍歷,獲取由末尾開始連續(xù)的數(shù)字為0的個數(shù)??{???if(numberStr.substring(i-1,i).equals("0"))????zeroNumberAtLast++;???else????break;??}??return zeroNumberAtLast;?}}
總結(jié)
以上是生活随笔為你收集整理的java 对象 转为繁体_Java实现将数字转化为繁体汉字表示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软仍未修复“这台电脑无法运行 Win1
- 下一篇: 小米卢伟冰解答 Redmi Note 1