package contest.numtochi;
import java.util.HashMap;
import java.util.Scanner;
public class NumToChi{
//创建数字和中文数字一一对应的映射
private HashMap<Integer, String> map;
//创建位数和中文单位的一一映射
private HashMap<Integer, String> unit;
// 判断输入的字符串是否全是数字
public boolean isNum(String str) {
boolean flag = true;
try {
Integer.parseInt(str);
} catch (Exception e) {
flag = false;
System.out.println("用户输入的字符不是数字");
}
return flag;
}
// 给map赋值,使数字和中文数字意义对应
public void initMap() {
map = new HashMap<Integer, String>();
map.put(0, "零");
map.put(1, "一");
map.put(2, "二");
map.put(3, "三");
map.put(4, "四");
map.put(5, "五");
map.put(6, "六");
map.put(7, "七");
map.put(8, "八");
map.put(9, "九");
}
// 给unit赋值,表示表示数字单位
public void initUnit() {
unit = new HashMap<Integer, String>();
unit.put(0, "");
unit.put(1, "十");
unit.put(2, "百");
unit.put(3, "千");
unit.put(4, "万");
unit.put(5, "十");
unit.put(6, "百");
unit.put(7, "千");
}
// 将全是数字的字符串转换成中文数字表示的方法
public String change(String str) {
String chinese = "";
// 去掉头部的0
str = String.valueOf(Integer.parseInt(str));
// 将数字转换成中文数字
for (int i = 0; i < str.length(); i++) {
int index = str.charAt(i) - 48;
chinese += map.get(index);
chinese += unit.get(str.length() - i - 1);
}
// 处理字符串中的零
while ((chinese.indexOf("零十") != -1) || (chinese.indexOf("零百") != -1)
|| (chinese.indexOf("零千") != -1)
|| (chinese.indexOf("零零") != -1)) {
if (chinese.indexOf("零十") != -1) {
chinese = chinese.replaceAll("零十", "零");
}
if (chinese.indexOf("零百") != -1) {
chinese = chinese.replaceAll("零百", "零");
}
if (chinese.indexOf("零千") != -1) {
chinese = chinese.replaceAll("零千", "零");
}
if (chinese.indexOf("零零") != -1) {
chinese = chinese.replaceAll("零零", "零");
}
}
if(chinese.indexOf("零万") != -1){
chinese = chinese.replaceAll("零万", "万");
}
//如果结尾有零
if(chinese.lastIndexOf("零") == chinese.length()-1){
chinese = chinese.substring(0, chinese.length()-1);
}
return chinese;
}
public static void main(String[] args) {
NumToChi ntc = new NumToChi();
System.out.println("请输入要转换的数字字符串:");
Scanner s = new Scanner(System.in);
String str = s.next();
if (ntc.isNum(str)) {
ntc.initMap();
ntc.initUnit();
System.out.println(ntc.change(str));
}
}
}
分享到:
相关推荐
本人用c写的完成汉语数字串与阿拉伯数字串间转换的一个小工具,完全基于串操作,不需要经过中间数值表示,原则上可以对任意长数字串进行转换,附带汉语数字串的大小写转换功能。
本例子将数字以汉字中的大写数字表示形式显示在页面中。例如“78.79”转换城”“柒拾捌元柒角玖分
为便于操作,我使用Excel的Vbscrip功能编写了一个汉字转拼音(全拼)、中文数字转阿拉伯数字、谐音数字转阿拉伯数字的代码。 谐音转数字这个所涉及的字典太多,目前暂只考虑了0和字母o、零、琳、您转0的字典,其他...
将阿拉伯数字表示的货币数值转换成以中文大写表示的货币数值。可以支持十万元级别和百万元级别。
阿拉伯数字转中文,是很容易的事。 但中文数字转为阿拉伯数字,却是不怎么好办的事,在网上查了很多资料,都没有找到。 有时,我们需要对中文数字排序,比如“第一章”、“第二章”、“第十章”等。 在转换过程...
数字大小写转换是指将数字表示的阿拉伯数字(例如123)转换为相应的中文大写数字(例如一百二十三)或英文单词形式(例如One Hundred Twenty-Three),或者将中文大写数字或英文单词形式转换为阿拉伯数字。
C#商品金额大小写转换,根据输入的阿拉伯数字,转化为中文的汉字,并带上单位输出
是一个自定义函数,将阿拉伯数字表示的金额转换成标准的中文大写。
2.6.6 ARABIC——将罗马数字转换为阿拉伯数字 114 2.6.7 BASE——将一个数转换为给定基数的文本格式 115 2.6.8 DECIMAL——将给定基数的文本转换为十进制数 116 第3章 日期和时间函数 117 3.1 了解Excel日期系统...
函数功能与参数:与“大写”函数相反,将大写字符转换为阿拉伯数字。 函数名称:分割取数 函数功能与参数:按分割符取数。第一参数为单元格,第二参数表示取第N个,第三个参数表示分割符。 函数名称:共有项 ...
函数功能与参数:与“大写”函数相反,将大写字符转换为阿拉伯数字。 函数名称:分割取数 函数功能与参数:按分割符取数。第一参数为单元格,第二参数表示取第N个,第三个参数表示分割符。 函数名称:共有项 函数...
leetcode给单链表加一js实现 LeetCode By JavaScript LeetCode Solutions (All By JavaScript!) 的个人Solutions汇总,全部使用JavaScript完成:grinning_squinting_...将阿拉伯数字转换为罗马数字 38 Count and Say:
142 将文本数字转换为数值并计算利润 290 143 从身份证号码中提取员工的性别信息 292 144 从身份证号码中提取员工的生日信息 294 145 快速恢复以科学计数法显示的商品条形码 296 146 将数字金额转换为...
以字符A为例Dec表示十进制,如65Hx表示十六进制,如41Oct表示八进制,如101Char表示显示字符,如AASCII码对照表图分为两个单元1,控制字符 0-31和1272,可显示字符 32-126(1)48~57为0到9十个阿拉伯数字;...
于是除了0、1这些阿拉伯 数字,像a、b、c这样的52个字母(包括大小写),还有一些特殊的符号(例如*、#、@ 等)在计算机中存储时也要使用二进制数来表示,具体用哪些二进制数表示哪些符号, 理论上每个人都可以有...
ErrorShow示例应用程序(本章后面将加以介绍)展示了如何调用该函数,以便将Microsoft公司定义的错误代码转换成它的文本描述。 有些人常常问我,Microsoft公司是否建立了一个主控列表,以显示每个Windows函数可能...
28、char 型变量中能不能存贮一个中文汉字?为什么? 10 29、abstract class 和interface 有什么区别? 10 30、Static Nested Class 和Inner Class 的不同? 11 31、java 中会存在内存泄漏吗,请简单描述。 11 32、...
28、char 型变量中能不能存贮一个中文汉字?为什么? 10 29、abstract class 和interface 有什么区别? 10 30、Static Nested Class 和Inner Class 的不同? 11 31、java 中会存在内存泄漏吗,请简单描述。 11 32、...