人民币大写转小写

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


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);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值