人民币大写转小写_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 人民币大写转小写

人民币大写转小写

 2013/7/10 3:35:44  zhangzhenjj  程序员俱乐部  我要评论(0)
  • 摘要:**公司的面试题,非得写出代码,发到博客分享一下吧,有问题希望大家多指正,互相学习,小弟是小虾米!packagecom.pyc.maven.demo.jerry;importjava.util.Arrays;importjava.util.HashMap;importjava.util.Map;/****@authorboy**/publicclassAnalysis{privatefinalstaticMap<Character,Integer>
  • 标签:

**公司的面试题,非得写出代码,发到博客分享一下吧,有问题希望大家多指正,互相学习,小弟是小虾米!

class="java" name="code">
package com.pyc.maven.demo.jerry;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * 
 * @author boy
 *
 */
public class Analysis {
	
	private final static Map<Character,Integer> unitMap = new HashMap<Character,Integer>();
	
	private final static Map<Character,Integer> amountMap = new HashMap<Character,Integer>();
	
	static{
		unitMap.put('亿', 100000000);
		unitMap.put('万', 10000);
		unitMap.put('千', 1000);
		unitMap.put('佰', 100);
		unitMap.put('拾', 10);
		unitMap.put('圆', 1);
		
		amountMap.put('玖', 9);
		amountMap.put('捌', 8);
		amountMap.put('柒', 7);
		amountMap.put('陆', 6);
		amountMap.put('伍', 5);
		amountMap.put('肆', 4);
		amountMap.put('叁', 3);
		amountMap.put('贰', 2);
		amountMap.put('壹', 1);
	}

	public static void main(String[] args) {
		
		long start = System.currentTimeMillis();
		
		
		System.out.println(analysis("壹佰贰拾叁万"));
		
		System.out.println(analysis("玖拾玖"));
		
		System.out.println(analysis("壹万零叁佰"));
		
		System.out.println(analysis("壹万零叁"));
		
		System.out.println(analysis("叁千万"));
		
		
		long end = System.currentTimeMillis();
		
		System.err.println(end - start);
	}
	
	/**
	 * 大写的人民币金额转换为数字
	 * @param target
	 * @return
	 */
	public static int analysis(String target){
		
		if(null == target || "".equals(target))
			return 0;
		
		if(!amountMap.containsKey(target.charAt(0))){
			target = "壹"+target;
		}
		if(!unitMap.containsKey(target.charAt(target.length()-1))){
			target = target+"圆";
		}
		
		char[] cc = target.toCharArray();
		
		
		System.out.println(Arrays.toString(cc));
		System.out.println("************************************");
		
		/**
		 * 中间变量
		 */
		int temp = 0;
		
		/**
		 * 之前取到的单位的值
		 */
		int preUnitValue = 0;
		
		/**
		 * 结果
		 */
		int result = 0;
		
		for(char c : cc){
			
			/**
			 * 拿到数字
			 */
			if(isAmount(c)){
				temp = amountMap.get(c);
			}
			
			/**
			 * 拿到单位
			 */
			else if(isUnit(c)){
				int unitValue = unitMap.get(c);
				/**
				 * 单位<=单位模式,相乘
				 * 单位>单位模式,相加
				 */
				if(preUnitValue !=0 && unitValue >= preUnitValue){
					result = (result+temp) * unitValue;
				}else{
					result = result + temp*unitValue;
				}
				preUnitValue = unitValue;
				temp = 0;
			}
		}
		
		return result;
	}
	
	/**
	 * 判断是否是数字
	 * @param c
	 * @return
	 */
	private static boolean isAmount(char c){
		return amountMap.containsKey(c);
	}
	
	/**
	 * 判断是否是单位
	 * @param c
	 * @return
	 */
	private static boolean isUnit(char c){
		return unitMap.containsKey(c);
	}
}
  • 相关文章
发表评论
用户名: 匿名