Java实现将数字转化为繁体汉字表示

原创 2007年09月29日 10:25:00

    在CSDN论坛上看到了一个帖子,要求用Java实现将数字转化为繁体汉字表示,如: 输入一个数字将其转化为大写,比如输入整型1034,得到“壹仟零叁拾肆”。

    看了之后感觉挺有意思的,自己也就写了一个。代码如下:

/* 实现将数字转化为繁体汉字表示   */

import java.util.HashMap;

public class NumberToChinese {
 
 public static void main(String[] args)
 {
  StringBuffer numberToCn = new StringBuffer();
  
  String number = "-2813040410.0787003560";
  
  HashMap cnHash = getCNHash();
  
  HashMap unitHash = getUnitHash();
  
  String[] partOfNumber = null;
  
  if(number.substring(0, 1).equals("-")) //判断数字是否为负数,并将数划分为小数、整数两部分
  {
   numberToCn.append("負");
   partOfNumber = number.substring(1).split("//.");
  }
  else
   partOfNumber = number.substring(0).split("//.");
  
  
  if(partOfNumber.length == 1) //如果输入的数没有小数则只进行整数部分转化
  {
      String str = PositiveChangeToCN(partOfNumber[0],cnHash,unitHash);
         numberToCn.append(str);
     }
  else //如输入的数有小数,则先转化整数部分,再转换小数部分
  {
   String str = PositiveChangeToCN(partOfNumber[0],cnHash,unitHash); //处理整数部分
      numberToCn.append(str);

      numberToCn.append("點");

   str = DecimalChangeToCN(partOfNumber[1],cnHash); //处理小数部分
      numberToCn.append(str);
  }
  
  System.out.println("Number = " + number);
  System.out.println("Chinese = " + numberToCn.toString());
 }
 
 /**
  * 设置汉字中的数字表示名称
  * @return
  */
 public static HashMap getCNHash()
 {
  HashMap cnHash = new HashMap();
  int count = 10;
  String[] cnArray = {"零","壹","貳","叁","肆","伍","陸","柒","捌","玖","拾"};
  
  for(int i = 0; i < count; i++)
  {
   cnHash.put(String.valueOf(i),cnArray[i]);
  }
  return cnHash;
 }
 
 /**
  * 设置汉字中的数字单位名称
  * @return
  */
 public static HashMap getUnitHash()
 {
  HashMap unitHash = new HashMap();
  int count = 5;
  String[] unitArray = {"拾","佰","仟","萬","億","兆"};
  
  for(int i = 2; i < count+2; i++)
  {
   unitHash.put(String.valueOf(i),unitArray[i-2]);
  }
  return unitHash;
 }
 
 /**
  * 转化数字小数部分
  * @param numberStr
  * @param cnHash
  * @return
  */
 public static String DecimalChangeToCN(String numberStr,HashMap cnHash)
 {
    StringBuffer cnStrBuffer = new StringBuffer();
   
    int zeroNumberAtLast = scanZeroAtLast(numberStr); //转化时除去输入时小数部分末尾存在的0
   
       //遍历数字,转换表示方式及单位
    for(int i = 0; i < numberStr.length() - zeroNumberAtLast; i++)
    {
     String aCnCode = (String)cnHash.get(numberStr.substring(i, i+1));  //转换数字表示名称
     cnStrBuffer.append(aCnCode);
    }
    return cnStrBuffer.toString();
 }
 
 /**
  * 转化数字正数部分,按照每四位数作为一个单元进行转化
  * @param numberStr
  * @param cnHash
  * @param unitHash
  * @return
  */
 private static String PositiveChangeToCN(String numberStr,HashMap cnHash,HashMap unitHash)
 {
  StringBuffer cnStrBuffer = new StringBuffer();
  
  int changeUnit = 4; //每次转换的位数范围
  int strLength = numberStr.length();
  int tempLoopCount = strLength /changeUnit; 
  
  if(strLength % changeUnit > 0)
   tempLoopCount++;
  
  for (int loop = 1 ; loop <= tempLoopCount; loop++) //每四位数字为一个单位转换数字
  {
  
  int beginIndex = strLength - (changeUnit * loop);
  int endIndex = beginIndex + changeUnit;
  
  if(beginIndex < 0)
  {
   beginIndex = 0;
   endIndex = strLength % changeUnit;
  }
  
  String tempStr = numberStr.substring(beginIndex,endIndex);
  int zeroNumberAtLast = scanZeroAtLast(tempStr); //转化时除去输入时整数部分末尾存在的0
  
  String aCnCode = new String();
  
  //遍历数字,转换表示方式及单位
  for(int i = 0; i < tempStr.length() - zeroNumberAtLast; i++)
  {
   String number = tempStr.substring(i, i+1);
      aCnCode += (String)cnHash.get(number);  //转换数字表示名称
   
            //根据数字所在数中的位置设置对应的单位
   if(!number.equals("0"))
   {
    int position = tempStr.length() - i;
    if(position > 1)
               aCnCode += (String)unitHash.get(String.valueOf(position)); //获取数字单位名称(拾、佰、仟)
   }
  }
  
  if(loop > 1)
  {
     aCnCode += (String)unitHash.get(String.valueOf(loop + 3)); //获取数字单位名称(萬、億、兆)
  }
  
  cnStrBuffer.insert(0, aCnCode); //合成转换结果
  }
  
  return cnStrBuffer.toString();
 }
 
 /**
  * 返回正数部分末尾为0的个数
  * @param numberStr
  * @return
  */
 public static int scanZeroAtLast(String numberStr)
 {
  int zeroNumberAtLast = 0;
  int i = numberStr.length();
 
  
  for(; i > 0; i--) //从数字字符串末尾开始遍历,获取由末尾开始连续的数字为0的个数
  {
   if(numberStr.substring(i-1,i).equals("0"))
    zeroNumberAtLast++;
   else
    break;
  }
  return zeroNumberAtLast;
 }
}

Java学习笔记 实现阿拉伯数字(一亿以内)转换为中文繁体数字

开始学习java编程,有看到一道题目(如题),便决定自己动手实现一下,发现什么事儿都是动手比想象的难好多,借鉴了网上高手的正则表达式,请各位高手指教。 /** * Created by charle...
  • zm903855066
  • zm903855066
  • 2014年02月01日 22:23
  • 2296

java版-金额转大写(可处理千万亿,精确到分)

转自:http://605113068.iteye.com/blog/2049163 package test; import java.math.BigDecimal; /** ...
  • u011943172
  • u011943172
  • 2016年06月01日 11:08
  • 1732

Java实现将阿拉伯数字转为汉字

比如输入“123”,返回“一百二十三”
  • u011718205
  • u011718205
  • 2016年04月11日 18:45
  • 6568

java将阿拉伯数字转换为中文数字

1.转换为大写中文数字,即钱的金额,http://blog.csdn.net/billfranck/article/details/4470898 http://www.cnblogs.com/hon...
  • liufang1991
  • liufang1991
  • 2015年02月04日 14:07
  • 9356

【Java编程】之中文数字转换为阿拉伯数字

遇到一个很有意思的题目,输入一个中文数字的字符串,然后输入字符串所代表的值。自己的思路: 首先想到了映射,就是把中文数字映射为数字,HashMap的import java.util.List; imp...
  • mlstd2012
  • mlstd2012
  • 2016年08月21日 01:40
  • 2193

Java 输入一个数字将其转换为汉字,如:102,一百零二

public class Convert { public void convert(int number) { //数字对应的汉字 String[] num = {"零","一","二","三",...
  • u012092806
  • u012092806
  • 2015年09月17日 20:29
  • 2857

Java实现阿拉伯数字转换成中文大写数字,以及中文大写数字到阿拉伯数字的转换。

学习王晓华老师的《算法的乐趣》一书中第四章之后,用Java重写并实现这一功能。 该文章是在学习完该章之后的一个学习总结,以供自己复习使用。 由于现在刚开始学习Java,为了熟悉Java的变成规范,...
  • cht_LOV_yl
  • cht_LOV_yl
  • 2016年10月21日 16:22
  • 4635

java实现 阿拉伯数字转换为汉字数字 算法

package test; public class NumberFormatTest { static String[] units = { "", "十", "百", "千",...
  • zhanghao_Hulk
  • zhanghao_Hulk
  • 2014年06月05日 09:39
  • 19000

Java 数字转换成中文读法

  • 2010年06月10日 17:50
  • 964B
  • 下载

Java中文简体繁体转换

项目路径如下附件下载使用方法如下:public class Translation { public static void main(String[] args) { ...
  • qqqqq210
  • qqqqq210
  • 2016年05月09日 22:30
  • 8415
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java实现将数字转化为繁体汉字表示
举报原因:
原因补充:

(最多只允许输入30个字)