今天碰巧需要,就写了一个汉字转化为数字的demo。
如:三百二十 —->320
废话不多说,直接上例子。
package com.yxxs.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class StringNum2Int {
public static HashMap<String,Integer> hm = new HashMap<String,Integer>();
static{
hm.put("一", 1);
hm.put("二", 2);
hm.put("三", 3);
hm.put("四", 4);
hm.put("五", 5);
hm.put("六", 6);
hm.put("七", 7);
hm.put("八", 8);
hm.put("九", 9);
}
public static void main(String[] args) {
String num = "四千二百五十一";
System.out.println(Chinese2Int(num));
}
/**
* 1-1 三
* 2-10 十五
* 3-10 三十五
* 4-100 四百二十
* 5-100 四百二十一
* 6-1000 三千五百二十
* 7-1000 三千五百二十一
* 找出规律:最高位是:Math.pow(10,lenth/2); eg: 三十五的最高位是10的lenth/2次方(lenth=3)
*/
//汉字数字转化为整数
public static int Chinese2Int(String num){
List<Character> list = new ArrayList<Character>();
String regex = "[一二三四五六七八九]";
//最终返回的整数
int finalnum = 0;
//字符串长度
int length = num.length();
//幂,用来做幂运算
int mi = length/2;
char[] chars = num.toCharArray();
//将千、百、十等表示位的汉字去掉,只留下具体数字,如三百二十一,只保留三、二、一,放入list
for(char c : chars){
if(String.valueOf(c).matches(regex))
list.add(c);
}
for(Character c : list){
//处理特殊情况--只有两位,eg:十八
if(length == 2 && list.get(0) == '十'){
finalnum += 10;
mi--;
}
//处理正常情况
if(mi >= 0){
int wei = (int)Math.pow(10, mi);
finalnum += hm.get(String.valueOf(c))*wei;
mi --;
}
}
return finalnum;
}
}