中文数字转换成阿拉伯数字。

今天写了一个感觉还算有点意思的东西,拿出来分享一下。个人原创,如有雷同纯属巧合。

代码比较的少,总共有两个类DigitalConverter.java 和MainActivity.java;功能实现在DigitalConverter.java这个类里面。下面把完整代码贴出来:

/----------------------------------------代码直接复制可用-------------------------------------------------------------------------------------------------------------------/

package com.example.administrator.myapplication;
import android.text.TextUtils;
import android.util.Log;
import java.util.HashMap;
import java.util.Map;
public class DigitalConverter {
    String mRex[]={"亿","万","千","百","十"};
    Map<String,Long> map=new HashMap<String,Long>();
    public String mCompany="一",mFatherCompany,mValue1,mValue2;
    public long mSum=0;
    public DigitalConverter mNumber1,mNumber2;
    boolean mIsNew=false;
    public DigitalConverter(String number, String fatherCompany){
        mFatherCompany=fatherCompany;
        initRex();
        if(TextUtils.isEmpty(number)){
            mSum=0;
        }else{
            if(number.length()==1){
                mSum=map.get(number);
            }else{
                mCompany= getCompany(number);
                if(mFatherCompany==""){
                    mFatherCompany=mCompany;
                    mIsNew=true;
                }
                int index=number.indexOf(mCompany);
                mValue1=number.substring(0,index);
                mValue2=number.substring(index+1,number.length());
                if(!TextUtils.isEmpty(mValue1)){
                    if(mValue1.trim().length()==1){
                        if(mIsNew){
                            mSum+=(map.get(mValue1.trim()))*map.get(mCompany);
                        }else{
                            mSum+=(map.get(mValue1))*map.get(mCompany)*map.get(mFatherCompany);
                        }
                    }else{
                        mNumber1=new DigitalConverter(mValue1,mFatherCompany);
                    }
                }
                if(!TextUtils.isEmpty(mValue2)){
                    if(mValue2.trim().length()==1){
                        if(mIsNew){
                            mSum+=map.get(mValue2.trim());
                        }else{
                            mSum+=map.get(mValue2.trim())*map.get(mFatherCompany);
                        }
                    }else{
                        if(mIsNew){
                            mNumber2=new DigitalConverter(mValue2,"");
                        }else{
                            mNumber2=new DigitalConverter(mValue2,mFatherCompany);
                        }
                    }
                }
            }
        }
    }
    private String getCompany(String value){
      for(int i=0;i<mRex.length;i++){
          if(value.contains(mRex[i])){
            return mRex[i];
          }
      }
        return null;
    }
private void initRex(){
    map.put("零",0L);
    map.put("一",1L);
    map.put("二",2L);
    map.put("两",2L);
    map.put("三",3L);
    map.put("四",4L);
    map.put("五",5L);
    map.put("六",6L);
    map.put("七",7L);
    map.put("八",8L);
    map.put("九",9L);
    map.put("十",10L);
    map.put("百",100L);
    map.put("千",1000L);
    map.put("万",10000L);
    map.put("亿",100000000L);
}
public long getSum(){
   if(null!=mNumber1){
       mSum+=mNumber1.getSum();
   }
    if(null!=mNumber2){
        mSum+=mNumber2.getSum();
    }
    return mSum;
}
}

/----------------------------------------------测试代码---------------------------------------------/
package com.example.administrator.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        String numberS="九万九千九百九十九亿三千五百二十一万三千三百二十一";
        DigitalConverter numberObj=new DigitalConverter(numberS,"");
        long number= numberObj.getSum();
        setContentView(R.layout.activity_main);
        TextView view=(TextView)findViewById(R.id.show);
        view.setText(number+"");
    }
}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值