zoukankan      html  css  js  c++  java
  • 转换中文数字成为阿拉伯数字

    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);
        }
        
    
    }
  • 相关阅读:
    洛谷P3796 【模板】AC自动机(加强版)(AC自动机)
    洛谷P3203 [HNOI2010]弹飞绵羊(LCT,Splay)
    洛谷P1501 [国家集训队]Tree II(LCT,Splay)
    LCT总结——概念篇+洛谷P3690[模板]Link Cut Tree(动态树)(LCT,Splay)
    [BZOJ3172][TJOI2013]单词 AC自动机
    [BZOJ1968][AHOI2005]COMMON约数研究 数学
    [BZOJ1053][SDOI2005]反素数ant 数学
    [BZOJ1045][HAOI2008]糖果传递 数学
    [BZOJ2733][HNOI2012]永无乡 线段树合并
    [BZOJ1005][HNOI2008]明明的烦恼 数学+prufer序列+高精度
  • 原文地址:https://www.cnblogs.com/i80386/p/2705104.html
Copyright © 2011-2022 走看看