题目是这样的:
    我随便输入一个汉字的数值就要将他转为数字.
    比如说我输入:二千七百零二 就要将他转为 2702
    输入:一千八百五十五万零四百要转为 18550400
输入的值再一亿一下! 用JAVA代码该如何实现?

解决方案 »

  1.   

    这是我以前看到的一篇如何转换的,当时收藏了下,现在给楼主分析下,不知道有没有用,呵呵~
    package test.format;
    import java.text.NumberFormat;
    import java.util.HashMap;
    public class SimpleMoneyFormat {
      public static final String EMPTY = "";
      public static final String ZERO = "零";
      public static final String ONE = "壹";
      public static final String TWO = "贰";
    public static final String THREE = "叁";
    public static final String FOUR = "肆";
     public static final String FIVE = "伍";
    public static final String SIX = "陆";
    public static final String SEVEN = "柒";
     public static final String EIGHT = "捌"; 
    public static final String NINE = "玖"; 
    public static final String TEN = "拾";
     public static final String HUNDRED = "佰";
     public static final String THOUSAND = "仟"; 
     public static final String TEN_THOUSAND = "万";
     public static final String HUNDRED_MILLION = "亿";
     public static final String YUAN = "元";
     public static final String JIAO = "角";
     public static final String FEN = "分";  
    public static final String DOT = "."; 
    private static SimpleMoneyFormat formatter = null;private HashMap chineseNumberMap = new HashMap();  private HashMap chineseMoneyPattern = new HashMap();  private NumberFormat numberFormat = NumberFormat.getInstance();  private SimpleMoneyFormat() {  numberFormat.setMaximumFractionDigits(4);   numberFormat.setMinimumFractionDigits(2);  numberFormat.setGroupingUsed(false);  chineseNumberMap.put("0", ZERO); chineseNumberMap.put("1", ONE);  chineseNumberMap.put("2", TWO); chineseNumberMap.put("3", THREE); chineseNumberMap.put("4", FOUR); chineseNumberMap.put("5", FIVE); chineseNumberMap.put("6", SIX);  chineseNumberMap.put("7", SEVEN);  chineseNumberMap.put("8", EIGHT); chineseNumberMap.put("9", NINE);  chineseNumberMap.put(DOT, DOT); chineseMoneyPattern.put("1", TEN); chineseMoneyPattern.put("2", HUNDRED); chineseMoneyPattern.put("3", THOUSAND);  chineseMoneyPattern.put("4", TEN_THOUSAND); chineseMoneyPattern.put("5", TEN);  chineseMoneyPattern.put("6", HUNDRED); chineseMoneyPattern.put("7", THOUSAND); chineseMoneyPattern.put("8", HUNDRED_MILLION); }
     public static SimpleMoneyFormat getInstance() {  if (formatter == null)  formatter = new SimpleMoneyFormat(); return formatter; }
      public String format(String moneyStr) {   checkPrecision(moneyStr);  String result; result = convertToChineseNumber(moneyStr);  result = addUnitsToChineseMoneyString(result);   return result;  } public String format(double moneyDouble) { return format(numberFormat.format(moneyDouble)); }  public String format(int moneyInt) {  return format(numberFormat.format(moneyInt));
      }  public String format(long moneyLong) {  return format(numberFormat.format(moneyLong)); }
     public String format(Number moneyNum) {   return format(numberFormat.format(moneyNum)); }
     private String convertToChineseNumber(String moneyStr) {  String result; StringBuffer cMoneyStringBuffer = new StringBuffer(); for (int i = 0; i < moneyStr.length(); i++) {   cMoneyStringBuffer.append(chineseNumberMap.get(moneyStr.substring(i, i + 1))); }
        //拾佰仟万亿等都是汉字里面才有的单位,加上它们 int indexOfDot = cMoneyStringBuffer.indexOf(DOT);  int moneyPatternCursor = 1;  for (int i = indexOfDot - 1; i > 0; i--) {   cMoneyStringBuffer.insert(i, chineseMoneyPattern.get(EMPTY + moneyPatternCursor));   moneyPatternCursor = moneyPatternCursor == 8 ? 1 : moneyPatternCursor + 1;  }  String fractionPart = cMoneyStringBuffer.substring(cMoneyStringBuffer.indexOf("."));  cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf("."), cMoneyStringBuffer.length()); while (cMoneyStringBuffer.indexOf("零拾") != -1) {
          cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零拾"), cMoneyStringBuffer.indexOf("零拾") + 2, ZERO);
        } while (cMoneyStringBuffer.indexOf("零佰") != -1) {
          cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零佰"), cMoneyStringBuffer.indexOf("零佰") + 2, ZERO);
        }while (cMoneyStringBuffer.indexOf("零仟") != -1) {
          cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零仟"), cMoneyStringBuffer.indexOf("零仟") + 2, ZERO);
        }while (cMoneyStringBuffer.indexOf("零万") != -1) {
         cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零万"), cMoneyStringBuffer.indexOf("零万") + 2, TEN_THOUSAND);
        } while (cMoneyStringBuffer.indexOf("零亿") != -1) {
          cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零亿"), cMoneyStringBuffer.indexOf("零亿") + 2, HUNDRED_MILLION); } while (cMoneyStringBuffer.indexOf("零零") != -1) {
          cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零零"), cMoneyStringBuffer.indexOf("零零") + 2, ZERO);
        } if (cMoneyStringBuffer.lastIndexOf(ZERO) == cMoneyStringBuffer.length() - 1) cMoneyStringBuffer.delete(cMoneyStringBuffer.length() - 1, cMoneyStringBuffer.length());  cMoneyStringBuffer.append(fractionPart);
      result = cMoneyStringBuffer.toString();  return result; }private String addUnitsToChineseMoneyString(String moneyStr) {  String result; StringBuffer cMoneyStringBuffer = new StringBuffer(moneyStr); int indexOfDot = cMoneyStringBuffer.indexOf(DOT);  cMoneyStringBuffer.replace(indexOfDot, indexOfDot + 1, YUAN); cMoneyStringBuffer.insert(cMoneyStringBuffer.length() - 1, JIAO); cMoneyStringBuffer.insert(cMoneyStringBuffer.length(), FEN); if (cMoneyStringBuffer.indexOf("零角零分") != -1)//没有零头,加整
      cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零角零分"), cMoneyStringBuffer.length(), "整"); else  if (cMoneyStringBuffer.indexOf("零分") != -1)//没有零分,加整   cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零分"), cMoneyStringBuffer.length(), "整");
        else { if(cMoneyStringBuffer.indexOf("零角")!=-1)
            cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf("零角"),cMoneyStringBuffer.indexOf("零角")+2);
         tmpBuffer.append("整"); }  result = cMoneyStringBuffer.toString(); return result; } private void checkPrecision(String moneyStr) {
        int fractionDigits = moneyStr.length() - moneyStr.indexOf(DOT) - 1;  if (fractionDigits > 2)  throw new RuntimeException("金额" + moneyStr + "的小数位多于两位。"); //精度不能比分低  }public static void main(String args[]) {  System.out.println(getInstance().format(new Double(10010001.01))); }} 
      

  2.   

     public static void chnNum2Digit(String chnNum) {   
            // initialize map   
            java.util.Map<String, Integer> unitMap = new java.util.HashMap<String, Integer>();   
            unitMap.put("个", 1);// 仅在数据存储时使用   
            unitMap.put("十", 10);   
            unitMap.put("百", 100);   
            unitMap.put("千", 1000);   
            unitMap.put("万", 10000);   
            unitMap.put("亿", 100000000);   
      
            java.util.Map<String, Integer> numMap = new java.util.HashMap<String, Integer>();   
            numMap.put("零", 0);   
            numMap.put("一", 1);   
            numMap.put("二", 2);   
            numMap.put("三", 3);   
            numMap.put("四", 4);   
            numMap.put("五", 5);   
            numMap.put("六", 6);   
            numMap.put("七", 7);   
            numMap.put("八", 8);   
            numMap.put("九", 9);   
      
            // 数据存储结构:   
            // 单位 数量   
            // "个" num   
            // "十" num   
            // "百" num   
            // "千" num   
            // "万" num   
            // "亿" num   
            java.util.Map<String, Long> dataMap = new java.util.LinkedHashMap<String, Long>();   
      
            // 保存"亿"或"万"之前存在的多位数   
            java.util.List<Long> multiNumList = new java.util.ArrayList<Long>();   
      
            long tempNum = 0;   
            for (int i = 0; i < chnNum.length(); i++) {   
                char bit = chnNum.charAt(i);   
                System.out.print(bit);   
      
                // 因为"亿"或"万"存在多位情况,所以需要进行判断   
                boolean isExist = false;   
                // 存在"亿"或"万"情况(不计算当前索引位)   
                if ((chnNum.indexOf('亿', i) != -1 || chnNum.indexOf('万', i) != -1)   
                        && chnNum.charAt(i) != '亿' && chnNum.charAt(i) != '万') {   
                    isExist = true;   
                }   
      
                // 数字   
                if (numMap.containsKey(bit + "")) {   
                    if (i != chnNum.length() - 1) {   
                        tempNum = tempNum + numMap.get(bit + "");   
                    }   
                    // 最末位数字情况   
                    else {   
                        dataMap.put("个", Long.valueOf(numMap.get(bit + "") + ""));   
                        tempNum = 0;   
                    }   
                } else if (bit == '亿') {   
                    // 存在"万亿"情况,取出"万"位值*10000,0000后重新put到map   
                    if (i - 1 >= 0 && chnNum.charAt(i - 1) == '万') {   
                        Long dataValue = dataMap.get("万");   
                        if (dataValue != null && dataValue > 0) {   
                            dataMap.put("万", dataValue * unitMap.get(bit + ""));   
                        }   
                        continue;   
                    }   
      
                    // 最后一位数进list等待处理   
                    if (tempNum != 0) {   
                        multiNumList.add(tempNum);   
                    }   
                    // 处理"亿"之前的多位数   
                    long sum = 0;   
                    for (Long num : multiNumList) {   
                        sum += num;   
                    }   
                    multiNumList.clear();   
                    dataMap.put("亿", sum);   
                    tempNum = 0;   
                } else if (bit == '万') {   
                    // 最后一位数进list等待处理   
                    if (tempNum != 0) {   
                        multiNumList.add(tempNum);   
                    }   
                    // 处理"万"之前的多位数   
                    long sum = 0;   
                    for (Long num : multiNumList) {   
                        sum += num;   
                    }   
                    multiNumList.clear();   
                    dataMap.put("万", sum);   
                    tempNum = 0;   
                } else if (bit == '千' && tempNum > 0) {   
                    // 存在"亿"或"万"情况,临时变量值*"千"单位值进list等待处理   
                    if (isExist) {   
                        multiNumList.add(tempNum * unitMap.get(bit + ""));   
                        tempNum = 0;   
                    }   
                    // 不存在"亿"或"万"情况,临时变量值put到map   
                    else {   
                        dataMap.put("千", tempNum);   
                        tempNum = 0;   
                    }   
                } else if (bit == '百' && tempNum > 0) {   
                    // 存在"亿"或"万"情况,临时变量值*"百"单位值进list等待处理   
                    if (isExist) {   
                        multiNumList.add(tempNum * unitMap.get(bit + ""));   
                        tempNum = 0;   
                    }   
                    // 不存在"亿"或"万"情况,临时变量值put到map   
                    else {   
                        dataMap.put("百", tempNum);   
                        tempNum = 0;   
                    }   
                } else if (bit == '十') {   
                    // 存在"亿"或"万"情况,临时变量值*"十"单位值进list等待处理   
                    if (isExist) {   
                        if (tempNum != 0) {   
                            multiNumList.add(tempNum * unitMap.get(bit + ""));   
                            tempNum = 0;   
                        }   
                        // 将"十"转换成"一十"   
                        else {   
                            tempNum = 1 * unitMap.get(bit + "");   
                        }   
                    }   
                    // 不存在"亿"或"万"情况,临时变量值put到map   
                    else {   
                        if (tempNum != 0) {   
                            dataMap.put("十", tempNum);   
                        }   
                        // 将"十"转换成"一十"   
                        else {   
                            dataMap.put("十", 1l);   
                        }   
                        tempNum = 0;   
                    }   
                }   
            }   
      
            // output   
            System.out.println();   
            long sum = 0;   
            java.util.Set<String> keys = dataMap.keySet();   
            for (String key : keys) {   
                Integer unitValue = unitMap.get(key);   
                Long dataValue = dataMap.get(key);   
                sum += unitValue * dataValue;   
            }   
            System.out.println(sum);   
        }   
      

  3.   


    /**
     * 将10亿以内的阿拉伯数字转成汉字大写形式
     */
    public class CnUpperCaser {
      // 整数部分
      private String integerPart;
      // 小数部分
      private String floatPart;
      // 将数字转化为汉字的数组,因为各个实例都要使用所以设为静态
      private static final char[] cnNumbers={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
      // 供分级转化的数组,因为各个实例都要使用所以设为静态
      private static final char[] series={'元','拾','百','仟','万','拾','百','仟','亿'};
      /**
       * 构造函数,通过它将阿拉伯数字形式的字符串传入
       * @param original
       */
      public CnUpperCaser(String original){ 
        // 成员变量初始化
        integerPart="";
        floatPart="";
        
        if(original.contains(".")){
          // 如果包含小数点
          int dotIndex=original.indexOf(".");
          integerPart=original.substring(0,dotIndex);
          floatPart=original.substring(dotIndex+1);
        }
        else{
          // 不包含小数点
          integerPart=original;
        }
      }
      
      /**
       * 取得大写形式的字符串
       * @return
       */
      public String getCnString(){
        // 因为是累加所以用StringBuffer
        StringBuffer sb=new StringBuffer();
        
        // 整数部分处理
        for(int i=0;i<integerPart.length();i++){
          int number=getNumber(integerPart.charAt(i));
          
          sb.append(cnNumbers[number]);
          sb.append(series[integerPart.length()-1-i]);
        }
        
        // 小数部分处理
        if(floatPart.length()>0){
          sb.append("点");
          for(int i=0;i<floatPart.length();i++){
            int number=getNumber(floatPart.charAt(i));
            
            sb.append(cnNumbers[number]);
          }
        }
        
        // 返回拼接好的字符串
        return sb.toString();
      }
      
      /**
       * 将字符形式的数字转化为整形数字
       * 因为所有实例都要用到所以用静态修饰
       * @param c
       * @return
       */
      private static int getNumber(char c){
        String str=String.valueOf(c);   
        return Integer.parseInt(str);
      }
      /**
       * @param args
       */
      public static void main(String[] args) {
        System.out.println(new CnUpperCaser("123456789.12345").getCnString());
        System.out.println(new CnUpperCaser("123456789").getCnString());
        System.out.println(new CnUpperCaser(".123456789").getCnString());
        System.out.println(new CnUpperCaser("0.1234").getCnString());
        System.out.println(new CnUpperCaser("1").getCnString());
        System.out.println(new CnUpperCaser("12").getCnString());
        System.out.println(new CnUpperCaser("123").getCnString());
        System.out.println(new CnUpperCaser("1234").getCnString());
        System.out.println(new CnUpperCaser("12345").getCnString());
        System.out.println(new CnUpperCaser("123456").getCnString());
        System.out.println(new CnUpperCaser("1234567").getCnString());
        System.out.println(new CnUpperCaser("12345678").getCnString());
        System.out.println(new CnUpperCaser("123456789").getCnString());
      }