1. 程式人生 > >Java金額轉換_阿拉伯數字轉換成中國大寫數字

Java金額轉換_阿拉伯數字轉換成中國大寫數字

這個題目我在網上看到有好多種做法,我自己也想出了一種做法

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/*
 * 思路:
 * 1.定義三張表,儲存中文數字和貨幣單位。
 * 2.鍵盤錄入使用IO流的BufferedReader進行接收鍵盤錄入。
 * 3.把錄入的阿拉伯數字弄成字元陣列,如果有小數位就先分割成整數位和小數位。
 * 4.先處理整數位再處理小數位,把每個數字所在位置的角標對著中文數字的表進行轉換,
 *    轉換完後再從對應的位置插入貨幣單位。
 * 5.把格式進行修正匹配後列印輸出。
 */
public class MoneyConvert {
	
	//建立中文大寫數字的表和貨幣單位的表
	static String[] cnNumTab = {"零", "壹", "貳", "叄", "肆", "伍", "陸", "柒","捌", "玖"};
	static String[] integerUnitTab = {"", "拾", "佰", "仟", "萬", "拾", "佰", "仟", "億", "拾", "佰", "仟"};
	static String[] decimalUnitTab = {"角", "分", "釐"};
	
	public static void main(String[] args) {
		System.out.println("請輸入金額:");
		
		//建立流物件,用於接收鍵盤錄入的資料
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		try {
			//把鍵盤接收的金額資料的小數位和整數位分隔開
			String str = in.readLine();
			String[] strArr = str.split("\\.");
			
			//把分隔好的數位金額資料分別打散成字元陣列
			char[] chNumArrInteger = strArr[0].toCharArray();
			
			//把阿拉伯數字轉換為中文的大寫數字
			String[] convertIntegerNum = convertUpper(chNumArrInteger);
			
			//定義合拼數字和單位用的容器
			StringBuilder container = new StringBuilder("圓整");
			
			//嵌入貨幣單位到轉換好的中文大寫數字裡去
			for(int x = convertIntegerNum.length -1, y = 0; x >=0; x--, y++) {
				String num = convertIntegerNum[x];
				if(num.equals("零")) {
					//判斷數位是否是仟萬億的位置,是則插入單位
					if(y == 4 || y == 8)
						container.insert(0, num+integerUnitTab[y]);
					else
						container.insert(0, num);
				} else {
					container.insert(0, num+integerUnitTab[y]);
				}
			}
			
			//如果有小數位,則對小數位的數也進行同樣的轉換操作
			if(strArr.length == 2) {
				int len = container.length();
				container.replace(len - 2, len, "圓");
				
				char[] chNumArrDecimal = strArr[1].toCharArray();
				String[] convertDecimalNum = convertUpper(chNumArrDecimal);
				
				//嵌入貨幣單位到轉換好的中文大寫數字裡去
				for (int x = 0; x < convertDecimalNum.length; x++) {
					container.append(convertDecimalNum[x]+decimalUnitTab[x]);
				}
			}
			
			//格式修正
			String put = container.toString();
			put = put.replaceAll("佰零+萬", "佰萬");
			put = put.replaceAll("佰零+億", "佰億");
			put = put.replaceAll("仟零+萬", "仟萬");
			put = put.replaceAll("仟零+億", "仟億");
			put = put.replaceAll("零+", "零");
			put = put.replaceAll("零萬", "萬");
			put = put.replaceAll("零萬零", "零");
			put = put.replaceAll("拾零", "拾");
			put = put.replaceAll("零圓", "圓");
			
			//完成後列印輸出
			System.out.println("該金額的大寫形式為:"+put);
			
		} catch (NumberFormatException e) {
			System.out.println("輸入錯誤,請輸入有效的金額數字");
		} catch (IOException e) {
			e.printStackTrace();
		}
		//鍵盤錄入接收完資料後流會自然斷開了,無需呼叫關流資源的方法了
	}
	
	//把阿拉伯數字轉換為中文的大寫數字
	public static String[] convertUpper(char[] arr) {
		String[] convertNum = new String[arr.length];
		for(int x = 0; x < arr.length; x++) {
			int num = Integer.parseInt(arr[x]+"");
			convertNum[x] = cnNumTab[num];
		}
		
		return convertNum;
	}
	
}

方法貌似有些麻煩,還在學習中,寫得可能不太好。