java汉字数字转换成阿拉伯数字

今天做一个日期转换的时候发现有些时间是用大写汉字写成的,需要转换成相应的数字值才能使用SimpleDateFormat进行格式刷。
问题描述:在月份和日的时候有十几、二十几、这样的数组出现如果直接转成相应的数组就会转成10X或者20X。
解决方法:写一个汉字对应数字的Map,当年份的时候直接在Map中取出对应数字即可,在月份和日的时候就单独写个方法解决。
方法思路:<伪码>
Map<String,String>chineseMap=new HashMap<String,String>();
chineseMap.put("一","1");
chineseMap.put("二","2");
chineseMap.put("三","3");


int sumNum=0;
int unitValue=0;//用于保存单位前的数字
for(int i=0;i<月份.length;i++){
int temp=chineseMap.get(月份.charAt(i)).toInt();
switch(temp){
case 10:
if(unitValue==0){
unitValue=1;//如果是十一月之类的,进来开始就是一个10
}
sumNum=+unitValue*temp;
unitValue=0;
case 100:
.
.
break;
default
unitValue+=temp;
break;
}
}
sumNum+=unitValue;
return sumNum;
代码:

private static final Map<String, String> chineseMap = new HashMap<String, String>();
private static final String yearReg="[一|二|三|四|五|六|七|八|九|十|〇|○]{4}年";
private static final String monthReg="(([十][一|二])|([一|二|三|四|五|六|七|八|九|十]))月";
private static final String dayReg="(([十][一|二|三|四|五|六|七|八|九])|(一|二|三|四|五|六|七|八|九|十)|([一|二|三][十][一|二|三|四|五|六|七|八|九]))日";
static{
chineseMap.put("一", "1");
chineseMap.put("元", "1");
chineseMap.put("二", "2");
chineseMap.put("三", "3");
chineseMap.put("四", "4");
chineseMap.put("五", "5");
chineseMap.put("六", "6");
chineseMap.put("七", "7");
chineseMap.put("八", "8");
chineseMap.put("九", "9");
chineseMap.put("〇", "0");
chineseMap.put("○", "0");
chineseMap.put("十", "10");
chineseMap.put("百", "100");
}
protected String regMethod(Pattern pattern, String value) {
Matcher ma = pattern.matcher(value);
if (ma.find()) {
return ma.group();
}
return null;
}

private int judgeChineseData(String value){
int sumNum=0;
int unitValue=0;
for(int i=0;i<value.length()-1;i++){
char te=value.charAt(i);
int temp=Integer.parseInt(chineseMap.get(String.valueOf(te)));
switch (temp) {
case 100:
if(unitValue==0){
unitValue=1;
}
sumNum+=unitValue*temp;
unitValue=0;
break;
case 10:
if(unitValue==0){
unitValue=1;
}
sumNum+=unitValue*temp;
unitValue=0;
break;
default:
unitValue+=temp;
break;
}
}
sumNum+= unitValue;
return sumNum;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值