package converter; import java.util.HashMap; //转换中文数字成为阿拉伯数字 public class chineseConverter { //万以下的单位 static HashMap<Character, Integer> m_mapUnit = new HashMap<Character, Integer>(); //万以上的单位 static HashMap<Character, Integer> m_wUnit = new HashMap<Character, Integer>(); //数字 static HashMap<Character, Integer> m_mapNum = new HashMap<Character, Integer>(); static{ //万以下的单位 m_mapUnit.put(Character.valueOf('十'), Integer.valueOf(1)); m_mapUnit.put(Character.valueOf('拾'), Integer.valueOf(1)); m_mapUnit.put(Character.valueOf('百'), Integer.valueOf(2)); m_mapUnit.put(Character.valueOf('佰'), Integer.valueOf(2)); m_mapUnit.put(Character.valueOf('千'), Integer.valueOf(3)); m_mapUnit.put(Character.valueOf('仟'), Integer.valueOf(3)); //万以上的单位 m_wUnit.put(Character.valueOf('万'), Integer.valueOf(4)); m_wUnit.put(Character.valueOf('亿'), Integer.valueOf(8)); m_wUnit.put(Character.valueOf('兆'), Integer.valueOf(16)); //数字 m_mapNum.put(Character.valueOf('零'), Integer.valueOf(0)); m_mapNum.put(Character.valueOf('○'), Integer.valueOf(0)); m_mapNum.put(Character.valueOf('〇'), Integer.valueOf(0)); m_mapNum.put(Character.valueOf('一'), Integer.valueOf(1)); m_mapNum.put(Character.valueOf('二'), Integer.valueOf(2)); m_mapNum.put(Character.valueOf('三'), Integer.valueOf(3)); m_mapNum.put(Character.valueOf('四'), Integer.valueOf(4)); m_mapNum.put(Character.valueOf('五'), Integer.valueOf(5)); m_mapNum.put(Character.valueOf('六'), Integer.valueOf(6)); m_mapNum.put(Character.valueOf('七'), Integer.valueOf(7)); m_mapNum.put(Character.valueOf('八'), Integer.valueOf(8)); m_mapNum.put(Character.valueOf('九'), Integer.valueOf(9)); m_mapNum.put(Character.valueOf('壹'), Integer.valueOf(1)); m_mapNum.put(Character.valueOf('贰'), Integer.valueOf(2)); m_mapNum.put(Character.valueOf('叁'), Integer.valueOf(3)); m_mapNum.put(Character.valueOf('肆'), Integer.valueOf(4)); m_mapNum.put(Character.valueOf('伍'), Integer.valueOf(5)); m_mapNum.put(Character.valueOf('陆'), Integer.valueOf(6)); m_mapNum.put(Character.valueOf('柒'), Integer.valueOf(7)); m_mapNum.put(Character.valueOf('捌'), Integer.valueOf(8)); m_mapNum.put(Character.valueOf('玖'), Integer.valueOf(9)); } static int end = 0; //下次开始接收的位置 //接收一个万以下的小数字 public static int getFigure(String input ,int offset){ int figure = 0; char c = input.charAt(offset); Integer ret = m_mapNum.get(c); if(ret == null){ return 0; } figure = ret; offset++; if(offset>=input.length()){ end = offset; return figure; } c = input.charAt(offset); int unitLevel = 0; ret = m_mapUnit.get(c); if(ret!=null){ offset++; unitLevel = ret; } figure *= Math.pow(10.0D, unitLevel); end = offset; return figure; } public static void main(String[] args){ int figure = 0; String input = "九百一十四"; for(int i=0;i<input.length();i = end){ int unitNum = getFigure(input,i); //TODO 如果不是小数字,再判断是否万级单位 figure += unitNum; //System.out.println(end + " "+ figure + " " + unitNum); } System.out.println(figure); } }