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

2023-11-15

    在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;
 }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java实现将数字转化为繁体汉字表示 的相关文章

  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • string.Empty 与 null。您使用哪一个?

    最近工作的同事告诉我不要使用string Empty设置字符串变量时但使用null因为它污染了堆栈 他说不做 string myString string Empty but do string mystring null 真的有关系吗 我
  • 检查 JavaScript 字符串是否为 URL

    JavaScript 有没有办法检查字符串是否是 URL 正则表达式被排除在外 因为 URL 很可能是这样写的stackoverflow 也就是说它可能没有 com www or http 如果你想检查一个字符串是否是有效的 HTTP UR
  • java.lang.IllegalStateException:提交响应后无法调用 sendRedirect()

    这两天我一直在尝试找出问题所在 我在这里读到我应该在代码中添加一个返回 我做到了 但我仍然得到 java lang IllegalStateException Cannot call sendRedirect after the respo
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • Python 3:将字符串转换为变量[重复]

    这个问题在这里已经有答案了 我正在从 txt 文件读取文本 并且需要使用我读取的数据之一作为类实例的变量 class Sports def init self players 0 location name self players pla
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp

随机推荐

  • linux文件编程(1)—— open、write、read、lseek、阻塞问题(ps文件操作/文件描述符/重定向原理/缓冲区/标准错误)

    参考 linux文件编程 1 常用API之open write read lseek 作者 丶PURSUING 发布时间 2021 04 08 22 19 28 网址 https blog csdn net weixin 44742824
  • SpringBoot通过QRCode生成二维码

    一 添加依赖
  • vue实现多页面应用开发,包含项目之间跳转

    需求 在一个vue项目工程下 需要部署两个项目甚至多个项目 实现思路 第一步 在vue config js文件中配置两个项目的入口 module exports pages index页面是必须的 作为主项目的入口页面 index entr
  • YARN的产生背景和架构剖析

    hadoop1存在的问题 1 单点故障 可靠性低 JobTracker采用了master slave结构 是集群事务的集中处理点 存在单点故障 2 单点瓶颈 扩展性差 需要完成的任务太多 JobTracker兼顾资源管理和作业控制跟踪功能跟
  • 基于计算机视觉的米粒计数检测——Matlab源码实现

    基于计算机视觉的米粒计数检测 Matlab源码实现 计数是现代生产和科研领域中的重要问题之一 在粮食收获领域 以小麦为例 正确地评估小麦产量对于农业生产和市场供应至关重要 然而 目前的计数方法多数是通过人工或半自动方式 难以快速 准确地完成
  • 小程序和网页的区别

    小程序和网页有什么区别呢 下面我们拿微信小程序来举例 运行环境 网页 在浏览器中运行 微信小程序 在微信中运行 开发环境 网页 代码编辑器 vscode 网页浏览器 chrome 微信小程序 代码编辑器 vscode 微信模拟器 微信开发者
  • mfc140.dll丢失怎样修复-由于找不到mfc140.dll无法继续执行代码的解决方法

    mfc140 dll是电脑文件中的dll文件 动态链接库文件 如果计算机中丢失了某个dll文件 可能会导致某些软件和游戏等程序无法正常启动运行 并且导致电脑系统弹窗报错 在电脑随便打开一个浏览器然后在顶部输入 dll修复程序 site 按下
  • Linux系统下安装jdk及环境配置(两种方法)

    这里介绍两种linux环境下jdk的安装以及环境配置方法 在windows系统安装jdk以及环境配置 相信大家都会 这里就不做赘述了 这里主要讲讲linux下的jdk安装以及环境配置 第一种属于傻瓜式安装 一键安装即可 yum安装 第二种手
  • 指针和引用 , 指针空值nullptr

    引用和指针 1 引用概念 引用不是新定义一个变量 而是给已存在变量取了一个别名 编译器不会为引用变量开辟内存空间 它和它引用的变量共用同一块内存空间 使用方式和普通变量相同 当原变量来对待 比如 李逵 在家称为 铁牛 江湖上人称 黑旋风 底
  • 不同岛屿的数量

    694 不同岛屿的数量 这道题要给出不同岛屿的数量 最直观的想法就是对发现的不同岛屿进行序列化 然后把序列化结果存到HashSet 那怎么序列化呢 其实比较类似于二叉树的序列化 记录遍历顺序 方向 这里用 1 2 3 4 代表上下左右 1
  • 全网最详细网络安全学习路线!手都给我码酸了!

    零基础小白 学完掌握可就业 入门到入土的网安学习路线 在各大平台搜的网安学习路线都太粗略了 看不下去了 我把自己报班的系统学习路线 整理拿出来跟大家分享了 本文为纯干货纯文字内容 需要详细学习路线图以及配套资料的同学可留言或者后台踢我免费分
  • 什么是计算机视觉

    计算机视觉 让计算机 看懂 和视频 这是什么场景 画面里都有什么 人 车和房子在什么位置 目标在做什么 目标间有什么关系 视觉是自然智能不可思议的结晶 猕猴的大脑皮层中视觉部分占据大约50 人脑中有关视觉的部分所占比重大 人类大脑对视觉进行
  • Linux下EC20实现ppp拨号

    硬件描述 EC20模块封装成标准的PCIe接口 和系统之家通讯主要通过usb通讯 系统描述 此处使用的是Linux 3 0 1 一 驱动支持 首先需要对Linux内核驱动做一定的修改 使操作系统能够支持EC20 1 Add VID add
  • Windows 无法启动MySql服务 (位于 本地计算机上)错误2: 系统找不到指定的文件

    错误 Windows 无法启动MySql服务 位于 本地计算机上 错误2 系统找不到指定的文件 错误原因 服务的路径与安装的路径不一致 之前安装过mysql后卸载重装容易出现这样的问题 解决方法 修改windows注册表 windows r
  • DC-DC升压电路

    目录 实验目的 课程条件 原理框图和实验思路 实验原理图 电路图分析
  • memcached server LRU 深入分析

    Memcached 人所皆知的remote distribute cache 不知道的可以javaeye一下下 或者google一下下 或者baidu一下下 但是鉴于baidu的排名商业味道太浓 从最近得某某事件可以看出 所以还是建议jav
  • 【Java基础】异常

    文章目录 1 基本信息 2 Throwable 体系 2 1 Exception 2 2 Error 2 3 常见的 Exception 和 Error 3 异常的处理 3 1 抛出异常throw 3 2 捕获异常try catch fin
  • OpenAI API(ChatGPT)接口地址https://api.openai.com/v1/chat网络问题无法访问Error: connect ECONNREFUSED ETIMEDOUT

    https api openai com v1 chat是openAI的API接口地址 因为长城的原因 23年年初一次更新后便无法访问 访问接口会提示Error connect ETIMEDOUT等网络相关的问题 解决办法有三种 本文只做方
  • 分类算法的R语言实现案例

    最近在读 R语言与网站分析 书中对分类 聚类算法的讲解通俗易懂 和数据挖掘理论一起看的话 有很好的参照效果 然而 这么好的讲解 作者居然没提供对应的数据集 手痒之余 我自己动手整理了一个可用于分类算法的数据集 下载链接 csdn下载频道搜索
  • Java实现将数字转化为繁体汉字表示

    在CSDN论坛上看到了一个帖子 要求用Java实现将数字转化为繁体汉字表示 如 输入一个数字将其转化为大写 比如输入整型1034 得到 壹仟零叁拾肆 看了之后感觉挺有意思的 自己也就写了一个 代码如下 实现将数字转化为繁体汉字表示 impo