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实现将数字转化为繁体汉字表示 的相关文章

  • Base36 编码字符串?

    我一直在网上查找 但找不到解决此问题的方法 在 Python Ruby 或 Java 中 如何对以下字符串进行 Base 36 编码 nOrG9Eh0uyeilM8Nnu5pTywj3935kW 5 Ruby 以 36 为基数 s unpa
  • 如何在 Ruby 中转义单引号?

    我通过一个脚本 不是我的 将一些 JSON 传递到服务器 该脚本接受 JSON 作为字符串 JSON 的某些内容包含单引号 因此我想确保在传递给脚本之前对所有单引号进行转义 我已经尝试过以下方法 gt irb gt 1 9 3p194 00
  • HAProxy SSL终止+客户端证书验证+curl/java客户端

    我希望使用我自己的自签名证书在 HAProxy 上进行 SSL 终止 并使用我创建的客户端证书验证客户端访问 我通过以下方式创建服务器 也是 CA 证书 openssl genrsa out ca key 1024 openssl req
  • 埃拉托色尼筛法 - 实现返回一些非质数值?

    我用 Java 实现了埃拉托斯特尼筛法 通过伪代码 public static void sieveofEratosthenes int n boolean numArray numArray new boolean n for int i
  • 为什么 MOVE CURSOR 在 OS X Mountain Lion 上不显示?

    我正在做一个项目 想看看 Swing 提供的每个光标是什么样子的 public class Test public static void main String args JFrame frame new JFrame frame set
  • 如何检测图像是否像素化

    之前有人在 SO 上提出过这样的问题 在Python中检测像素化图像 https stackoverflow com questions 12942365 detecting a pixelated image in python还有关于q
  • Java中的断点和逐步调试?

    抱歉我的问题名称很奇怪 我不知道如何寻找这个 因为我不知道这些东西是如何称呼的 Visual Studio 中至少有一个功能 您可以单击代码左侧并设置一个大红点的起点 然后运行程序 您可以通过按 f8 或 f5 实际上是不同的 f 来跟踪步
  • 添加到列表时有没有办法避免循环?

    我想知道这样的代码 List
  • 虽然我的类已加载,但 Class.forName 抛出 ClassNotFoundException

    代码如下 它的作用是加载我放在主目录中的 jar 文件中的所有类 import java io File import java util jar JarFile import java util jar JarEntry import j
  • 当 minifyEnabled 为 true 时 Android 应用程序崩溃

    我正在使用多模块应用程序 并且该应用程序崩溃时minifyEnabled true in the installed模块的build gradle 以下是从游戏控制台检索到的反混淆堆栈跟踪 FATAL EXCEPTION Controlle
  • strlen() 编译时优化

    前几天我发现你可以找到编译时strlen使用这样的东西 template
  • 如何通过 Android 按钮单击运行单独的应用程序

    我尝试在 Android 应用程序中添加两个按钮 以从单独的两个应用程序订单系统和库存系统中选择一个应用程序 如图所示 我已将这两个应用程序实现为两个单独的 Android 项目 当我尝试运行此应用程序时 它会出现直到正确选择窗口 但是当按
  • IntelliJ 组织导入

    IntelliJ 是否具有类似于 Eclipse 中的组织导入功能 我拥有的是一个 Java 文件 其中多个类缺少导入 例子 package com test public class Foo public Map map public J
  • 使用Java绘制维恩图

    我正在尝试根据给定的布尔方程绘制维恩图 例如 a AND b AND c我想在 Android 手机上执行此操作 因此我需要找到一种使用 Java 来执行此操作的方法 我找到了一个完美的小部件 它可以完成我在这方面寻找的一切布尔代数计算器
  • 无需登录即可直接从 Alfresco 访问文件/内容

    我的场景是这样的 我有一个使用 ALFRESCO CMS 来显示文件或图像的 Web 应用程序 我正在做的是在 Java servlet 中使用用户名和密码登录 alfresco 并且我可以获得该登录的票证 但我无法使用该票证直接从浏览器访
  • 如何让 Emma 或 Cobertura 与 Maven 一起报告其他模块中源代码的覆盖率?

    我有一个带有 Java 代码的多模块 Maven 设置 我的单元测试在其中一个模块中测试多个模块中的代码 当然 这些模块具有相互依赖性 并且在测试执行之前根据需要编译所有相关模块中的代码 那么 如何获得整个代码库覆盖率的报告 注意 我不是问
  • 禁用 Android 菜单组

    我尝试使用以下代码禁用菜单组 但它不起作用 菜单项仍然启用 你能告诉我出了什么问题吗 资源 菜单 menu xml menu menu
  • 如何在Java中对对象数组进行字段级别排序以进行等级比较?

    In Java Class StudentProgress String Name String Grade CTOR goes here main class main method StudentProgress arrayofObje
  • 使用 Java https 上传到 Imgur v3 错误

    我目前正在尝试使用他们当前的 API v3 上传到 imgur 但是我不断收到错误 错误 javax net ssl SSLException 证书中的主机名不匹配 api imgur com imgur com OR imgur com
  • 即使调整大小,如何获得屏幕的精确中间位置

    好的 这个问题有两部分 当我做一个JFrame 并在其上画一些东西 即使我将宽度设置为 400 并使其在一个项目击中它时 当然 允许项目宽度 它会反弹回来 但由于某种原因 它总是偏离屏幕约 10 个像素 有没有办法解决这个问题 或者我只需要

随机推荐

  • 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