`
JavaScape
  • 浏览: 15417 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

Java试题 之 阿拉伯数字转换成中文数字

阅读更多
之前见过一道题觉着挺有意思
今天没什么事就回想着做了一把 拿出来和大家一起看看
希望各位能给点意见 一起讨论下


题目大概:
将一组阿拉伯数字转换成中文大写数字
52306 ==> 伍万贰千叁百零陆

我实现了将文件中的一组数字(每行为一个数)
形如:

25364
466932300
12350006
100000
66699553001

这样的文件中的数字全转换成中文大写数字


只是算法没有架构设计的成分
可以自定义一个输入文件既可运行
代码如下(源文件见附件):

import java.io.BufferedReader;
import java.io.FileReader;

public class Numeric2ChineseStr
{
    
    public static void main(String[] args)
        throws Exception
    {
        String fileName = "c:\\input.txt";
        
        // 单位数组
        String[] units = new String[] {"十", "百", "千", "万", "十", "百", "千", "亿"};
        
        // 中文大写数字数组
        String[] numeric = new String[] {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
        
        // 读文件
        BufferedReader br = new BufferedReader(new FileReader(fileName));
        String temp = null;
        temp = br.readLine();
        String res = "";
        
        while (null != temp)
        {
            // 遍历一行中所有数字
            for (int k = -1; temp.length() > 0; k++)
            {
                // 解析最后一位
                int j = Integer.parseInt(temp.substring(temp.length() - 1, temp.length()));
                String rtemp = numeric[j];
                
                // 数值不是0且不是个位 或者是万位或者是亿位 则去取单位
                if (j != 0 && k != -1 || k % 8 == 3 || k % 8 == 7)
                {
                    rtemp += units[k % 8];
                }
                
                // 拼在之前的前面
                res = rtemp + res;
                
                // 去除最后一位
                temp = temp.substring(0, temp.length() - 1);
            }
            
            // 去除后面连续的零零..
            while (res.endsWith(numeric[0]))
            {
                res = res.substring(0, res.lastIndexOf(numeric[0]));
            }
            
            // 将零零替换成零
            while (res.indexOf(numeric[0] + numeric[0]) != -1)
            {
                res = res.replaceAll(numeric[0] + numeric[0], numeric[0]);
            }
            
            // 将 零+某个单位 这样的窜替换成 该单位 去掉单位前面的零
            for (int m = 1; m < units.length; m++)
            {
                res = res.replaceAll(numeric[0] + units[m], units[m]);
            }
            
            // 这里打印一下 可以改成写文件
            System.out.println(res);
            
            // 读取下一个数
            res = "";
            temp = br.readLine();
        }
    }
}
分享到:
评论
13 楼 leeldy 2009-10-26  

package com.acm;

//Java试题 之 阿拉伯数字转换成中文数字
public class TransNumbers {

	String[] units = new String[] {"", "十", "百", "千", "万", "亿"};

	String[] numeric = new String[] {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
	
	public void transform(String numStr) {
		
		int i;
		int j;
		
		//取出前导空格和0
		for(i=0,j=numStr.length();i<j;i++){
			if(numStr.charAt(i)!='0' && numStr.charAt(i)!=' '){
				break;
			}
		}

		StringBuffer buffer = new StringBuffer();
		StringBuffer unit=new StringBuffer();
		unit.append("");
		//将数字反转
		String str = new StringBuffer(numStr.substring(i)).reverse().toString();
		String temp=null;
		int length = str.length();
		//数字分组转换
		for(i=0,j=length>4?4:length;i<length;i+=4,j+=4){

			int start=i;
			int end=j<length?j:length;
			//每4个为一组
			temp=this.trans4(str.substring(start,end));
			
			if(temp.length()>0){
				buffer.append(unit);
				buffer.append(temp);
			}

			int unitLength = unit.length();
			//单位变换
			if(unitLength>0 && unit.lastIndexOf("万")==(unitLength-1)){
				unit.setLength(unitLength-1);
				unit.append("亿");
			}else{
				unit.append("万");
			}
		}
		buffer=buffer.reverse();
		System.out.println(buffer.toString());
	}

	// 最多转换4位
	public String trans4(String str) {

		StringBuffer buffer = new StringBuffer();
		int num;
		int length = str.length();
		for(int i = 0, j = 0; i < length; i++, j++) {
			num = str.charAt(i) - '0';
			if(num > 0) {
				// 输出单位条件:当前位置数不为0,当前位置不为第一个位置
				buffer.append(this.units[j]);

				buffer.append(this.numeric[num]);
			} else {
				// 当前位置不为第一个位置输出一个零
				if(i > 0) {
					buffer.append(this.numeric[num]);
				}
				// 当前位置数为0
				// 跳过连续的0
				do {
					j++;
					i++;
				} while(i<4 && (str.charAt(i) - '0') == 0);
				i--;
				j--;
			}
		}
		return buffer.toString();
	}

	public static void main(String[] args) {

		TransNumbers tn = new TransNumbers();

		tn.transform("00001234");

	}
}



无聊,我也写个看下。
12 楼 徐风子 2009-09-08  
建议先学习一下会计里面的数字金额表示方法。
以前也写过类似的程序,比较麻烦的是不知道数该怎么读。
程序倒是方便,主要使用replaceAll,一通替换就够了,不过效率比较低,呵呵。
11 楼 sam1982 2009-09-06  
<pre name="code" class="java">public static String toChineseNum(long number) {
long num1 = 0,num2 = 0;
if (number == 0) {
return "零";
} else if (number == 1) {
return "一";
} else if (number == 2) {
return "二";
} else if (number == 3) {
return "三";
} else if (number == 4) {
return "四";
} else if (number == 5) {
return "五";
} else if (number == 6) {
return "六";
} else if (number == 7) {
return "七";
} else if (number == {
return "八";
} else if (number == 9) {
return "九";
} else if (number == 10) {
return "十";
} else if (number &gt; 99999999) {
num1 = number/100000000;
num2 = number%100000000;
return toChineseNum(num1) + "亿" + ( num2==0?"":( (num2 &lt; 10000000 ? "零":"") + toChineseNum(num2) ) );
} else if (number &gt; 9999 &amp;&amp; number &lt; 100000000) {
num1 = number/10000;
num2 = number%10000;
return toChineseNum(num1) + "万" + ( num2 ==0?"":( (num2 &lt; 1000 ? "零":"") + toChineseNum(num2)));
} else if (number &gt; 999 &amp;&amp; number &lt; 10000) {
num1 = number/1000;
num2 = number%1000;
return toChineseNum(num1) + "千" + ( num2 ==0?"":( (num2 &lt; 100 ? "零":"") + toChineseNum(num2)));
} else if (number &gt; 99 &amp;&amp; number &lt; 1000 ) {
num1 = number/100;
num2 = number%100;
return toChineseNum(num1) + "百" + ( num2 ==0?"":( (num2 &lt; 10 ? "零":"") + toChineseNum(num2)));
} else if (number &gt; 9 &amp;&amp; number &lt; 100) {
num1 = number/10;
num2 = number%10;
return toChineseNum(num1) + "十" + ( num2 ==0?"":(toChineseNum(num2)));
}
return "";
}</pre>
<p> 这是我的,使用递归,呵呵~</p>
10 楼 xixix2004 2009-07-30  
曾经写过一个把阿拉伯数字的钱如3,912,999.90元 转换成中文描述

我的解决方案思路和你差不多
9 楼 JavaScape 2009-07-25  
smilerain 写道
多个小数点就错误了

哈哈 不好意思 不是我错了 是你理解错了 我没说支持小数滴~。~
8 楼 smilerain 2009-07-19  
多个小数点就错误了
7 楼 JavaScape 2009-07-17  
顺便提一下子 我的用户名 很不错吧 嘎嘎! 还有头像也不耐! 赞一个 :)
6 楼 JavaScape 2009-07-17  
楼上果然强悍 是个有心人啊 其实上面的代码很多BUG 的 现在看代码的人少了 我想赚点人气的 结果 写的错了 也没人看或者没看出来 结果没人回复我 :(

现需原本的代码的可以给我留言 一起研究一下子 有问题欢迎提啊 !
5 楼 xxpniu 2009-07-14  
有问题!
比如 100000000  就错了!!
应该是壹亿 却说一亿万!!!
4 楼 allenofchina 2009-07-13  
刚刚看到,稍微思考一下,随便说说。

因为中文计数有点比较简单,比如第四位后面加千,第五位加万,第六位后面加十万,有一定规律可循。

可以分两步走,第一步是把阿拉伯数字替换成汉字
第二步是顺序循环,第几位后面加十或者百,零的的时候不加。到万过后,变成前面再加个十

3 楼 JavaScape 2009-07-13  
哈哈 原来有BUG 才有人回复 果然灵验 哈
2 楼 ansjsun 2009-07-12  
int j = Integer.parseInt(temp.substring(temp.length() - 1, temp.length()));  
有这句你就大不了了
1 楼 JavaScape 2009-07-08  
本方法支持无穷大的数字哦 只要内存里JVM放的下的就可以

相关推荐

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

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

    中文数字转成阿拉伯数字 java 实现

    在Java编程语言中,将中文数字转换为阿拉伯数字是一个常见的需求,特别是在处理中文文本数据时。这个场景下,我们有一个名为“中文数字转成阿拉伯数字 java 实现”的压缩包,包含了一个实现此功能的Java包和一个单元...

    java阿拉伯数字转换成中文传统读法

    在编程领域,尤其是在Java开发中,有时我们需要将阿拉伯数字(1, 2, 3等)转换为中文的传统读法(如“一”,“二”,“三”)。这个任务涉及到字符串处理、数字转换以及对中文字符的理解。在本文中,我们将深入探讨...

    java 阿拉伯数字转换成人民币的工具类

    java编写的 阿拉伯数字转换成相应的人民币汉字类

    阿拉伯数字转换为中文小写数字

    在Android开发过程中,有时我们需要将阿拉伯数字(1, 2, 3...)转换成中文小写数字(一,二,三...),特别是在涉及到文化习惯或者用户界面本地化的时候,如书籍页码显示。这个任务涉及到字符串处理和字符映射,下面...

    java金额转换,阿拉伯数字转换成中国传统形式。

    在Java编程中,将阿拉伯数字转换为中国传统形式的金额表示是一项常见的需求,特别是在财务系统或者银行应用中。这种转换能够使数字更符合中国人的阅读习惯,增加可读性。在这个问题中,我们要处理的是将像...

    阿拉伯数字转换为中文大写

    "阿拉伯数字转换为中文大写" 阿拉伯数字转换为中文大写是将阿拉伯数字转换为中文大写数字的过程。在这个过程中,我们需要使用数组来存储中文大写数字和单位,然后通过遍历阿拉伯数字字符串,逐个将数字转换为中文...

    java阿拉伯数字转中文数字

    java阿拉伯数字转中文数字的重要性在于,它可以应用于各种需要将数字转换为中文的场景,例如在生成中文发票、中文报告、中文协议等文档时,需要将阿拉伯数字转换为中文数字。 java阿拉伯数字转中文数字的实现方法有...

    java实现阿拉伯数字转汉字数字

    在开发过程中,经常需要将阿拉伯数字转换为汉字数字,以便于更好地与中文环境集成。在本文中,我们将详细介绍Java实现阿拉伯数字转换为汉字数字的源代码,供大家参考。 首先,需要了解阿拉伯数字和汉字数字的基本...

    java将数字转换成大写字母

    Java 中实现数字金额到中文大写字符的转换是指将阿拉伯数字转换成中文大写的过程。本文将详细介绍 Java 实现数字金额到中文大写字符的转换的知识点。 知识点一: 数字金额到中文大写字符的转换的需求 在实际应用中...

    java 阿拉伯数字转化中文大写

    根据提供的文件信息,可以看出这是一个Java程序,用于将阿拉伯数字转换为中文大写形式,并且能够处理包含小数点的情况。接下来我们将对这个程序的关键部分进行详细的解析与解释。 ### 核心知识点概述 1. **数据...

    java写的将阿拉伯数字转化为中文金额的大写方式

    在Java编程中,将阿拉伯数字转化为中文金额大写是一项常见的任务,特别是在财务系统或报表生成中。这个题目要求实现一个程序,能够读取输入的阿拉伯数字字符串,然后将其转换为符合中国会计规范的中文大写金额表示。...

    java阿拉伯数字转大写金额+大写金额转阿拉伯数字

    在Java编程中,将阿拉伯数字转换为大写金额以及将大写金额转换回阿拉伯数字是常见的财务处理需求。这些操作通常用于财务报表、发票或银行系统中,以确保数据的准确性和一致性。以下是对这个主题的详细解释: 一、...

    将阿拉伯数字金额转换为中国传统形式人民币值

    自己写的将阿拉伯数字金额转换为中国传统形式人民币值的小程序,亲测可用!

    人民币数字转换成汉字大写

    人民币数字转换成汉字大写 android Java 运行效率

    Java将阿拉伯数字转化成汉字金钱

    将阿拉伯数字转化成汉字金钱 如1234.45转化为壹仟贰佰叁拾肆元肆角伍分

    阿拉伯数字转换成大写字体jsp

    本实验项目“阿拉伯数字转换成大写字体jsp”主要涉及到的知识点包括JSP基础、字符串操作、条件判断和数字字符的映射。 首先,我们要理解JSP的基本工作原理。JSP文件在服务器上被编译为Servlet,然后由Servlet来处理...

    java实现阿拉伯数字转中文

    在Java编程语言中,将阿拉伯数字转换为中文数字是一项常见的需求,特别是在处理中文文本或进行中文数字输入输出时。这个任务可以通过编写特定的算法或利用已有的类库来完成。以下是一个详细的步骤介绍和相关知识点...

    java写的把数字转化成英语的工具

    有些变态的报表需要把数字转换成英文输出,但愿这个能帮得到你 one hundred eighty-eight thousand, eight hundred one hundred eighty-eight thousand, eight hundred one one hundred eighty-eight thousand, ...

    中文数字转换阿拉伯数字.rar

    在许多应用程序中,为了方便计算或标准化数据,我们需要将中文数字转换成阿拉伯数字。下面将详细介绍这一转换过程以及相关的技术知识。 1. **基础概念**: - **中文数字**:以汉字表示的数字,如“一”代表1,“二...

Global site tag (gtag.js) - Google Analytics