`

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

    博客分类:
  • 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;
	}
2
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics