1. 程式人生 > >[第一天]金額轉換,阿拉伯數字的金額轉換成中國傳統的形式如

[第一天]金額轉換,阿拉伯數字的金額轉換成中國傳統的形式如

要求

金額轉換,阿拉伯數字的金額轉換成中國傳統的形式

(¥1011)→(壹仟零壹拾壹元整)輸出

思路

  • 1 輸入串進行拆分 4位一部分,如 ¥11001 拆為1 和1001兩部分(不斷2分)
  • 2 拆出來的部分進行轉換,如1–>壹,並處理‘零’這個怪物
  • 3 所有部分裝在一個字串陣列(ArrayList)中,
  • 4 對陣列中的字串進行拼接,並加上單位,如 {壹,零壹}拼接結果為:壹[仟]零壹[元][整]

程式碼塊

能力有限,程式碼不整潔也就將忍了,默默努力


package com.lx113322outlook;

import java.io.IOException;
import
java.util.ArrayList; import java.util.Scanner; /*金額轉換,阿拉伯數字的金額轉換成中國傳統的形式如: (¥1011)→(壹仟零壹拾壹元整)輸出。*/ /*解決方案說明 * 1 輸入串進行拆分 4位一部分,如 ¥11001 拆為1 和1001兩部分 * 2 拆出來的部分進行轉換,如1-->壹 * 3 所有部分裝在一個字串陣列中, * 4 對陣列中的字串進行拼接,並加上單位,如 [壹,零壹]拼接結果為:壹[仟]零壹[元][整] * * */ public class MoneyTrans { private String input = ""
; private String result=""; private ArrayList<String> result_temp = new ArrayList<String>(); public String getResult() { return result; } public MoneyTrans(String input) { // TODO Auto-generated constructor stub this.input = input; } private
final String[] part_table={"整","元","萬","億","兆"}; private final String[] trans_table = { "", "拾", "佰", "仟"}; private final String[] num_table = { "零", "壹", "貳", "叄", "肆", "伍", "陸", "柒", "捌", "玖" }; //完成最後拼接,並帶上應該有的單位 public void transMoney() { subStringTrans((input.substring(1, input.length()))); for(int i=0;i<result_temp.size();i++){ String temp=result_temp.get(i).toString(); if(temp.equals("零")); else { result+=temp; result+=part_table[result_temp.size()-i]; } } result+=part_table[0]; System.out.println(result); } // 遞迴呼叫,完成拆分和轉換 private void subStringTrans(String str) { if (str.length() > 4) { //防止mod4==0進入死迭代導致溢位,如8%4=0 if (str.length() % 4 == 0) { String str1 = str.substring(0, 4); subStringTrans(str1); String str2 = str.substring(4, str.length()); subStringTrans(str2); } else { // 小於4的部分可以直接進行轉換 String str1 = str.substring(0, str.length() % 4); subStringTrans(str1); // 大於4的部分繼續拆分 String str2 = str.substring(str.length() % 4, str.length()); subStringTrans(str2); } } else { // 如果小於4,直接進行數字轉漢字,所有轉換完成進行拼接,拼接完成再進行單位插入 String temp="";//存當前的字串 for (int i = 0; i < str.length(); i++) { //數字轉文字 String temp_s1=num_table[Integer.parseInt(str.substring(i, i+1))]; if(temp_s1.equals("零")){ if(i==3); else if(temp.lastIndexOf("零") != -1 &&temp.lastIndexOf("零")==temp.length()-1) ; else temp+=temp_s1; } else temp+=num_table[Integer.parseInt(str.substring(i, i+1))]; //單位,數字為零不用單位 if(!num_table[Integer.parseInt(str.substring(i, i+1))].equals("零")) temp+=trans_table[str.length() - (1 + i)]; } result_temp.add(temp); } } /** * @param args */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub while(true){ Scanner sc = new Scanner(System.in); String str = null; System.out.println("Enter as ¥1001(the first char must be ¥):"); str = sc.nextLine(); if(str.charAt(0)=='¥'){ MoneyTrans m = new MoneyTrans(str); // System.out.println(); m.transMoney(); } } } }