数字串转中文读法串-Java实现

原创 2015年11月19日 10:16:48

面试时被问到这个问题,遂查看相关博客,自己也作了相应的实现:

package num2rmb;
public class Num2Rmb3 {
	/**
	 * 处理0,1,2.。9的中文读法的
	 */
	private String[] hanArr = {"零" , "壹" , "贰" , "叁" , "肆" , "伍" , "陆" , "柒" , "捌" , "玖"};
	/**
	 * 10进制的读法
	 */
	private String[] unitArr = {"十" , "百" , "千"};
	public static void main(String[] args) {
		Num2Rmb3 nr = new Num2Rmb3();
		nr.readNumString("1052433768");
//		nr.readNumString("5000");
//		System.out.println(Math.ceil(3.5));   //4.0
	}

	public void readNumString(String numstr)
	{
		StringBuilder sb = new StringBuilder();
		int len = numstr.length();
		int count = 0;
		while (len > 0)    //依次取出最后,以4位字符为标准取子串
		{
			int i = (len - 4) >= 0 ? (len - 4) : 0;
			String temp = numstr.substring(i, len);
			System.out.println(temp);
			String res = processTemp(temp, count);  // 对这四个字符进行处理
			sb.insert(0, res);              //往前将求得的字符串插入sb中
			len -= 4;
			count++;  // 记录这个子串中能组成多少个 4个字符的串

		}
		System.out.println(sb);


	}
	public String processTemp(String temp, int count)
	{
		String res = "";
		int len1 = temp.length();
		// 0042
		// 200
		for (int i = 0; i < len1; i++)
		{
			//将每个字符转成数字
			int num = temp.charAt(i) - 48;
			if (num == 0)  //如果是0
			{
				if (i == (len1 - 1))  //到了子串的最后一个字符
				{
					continue;
				}
				//如果下一个是数字字符不是0
				if (temp.charAt(i + 1) != '0')
				{
					res += hanArr[num];
				}
				else {
					continue;
				}
			}
			else if( i == (len1 - 1) ) {  //不是0,最后一个字符
				res += hanArr[num];
			}
			else  //
			{
				res += hanArr[num] + unitArr[len1 - i - 2];
			}
		}

		if (count == 1)
		{
			res += "万";
		}
		else if (count == 2)
		{
			res += "亿";
		}
		return res;
	}

}


版权声明:取长补短,学以致用……

相关文章推荐

java 实验七 之 阿拉伯整数转换为中文大写数字(注意读法)

import java.util.*; import java.util.Scanner; public class Lab7 { LinkedList Stack=new LinkedList(...

华为机试:中文整数读法的拼音转数字

import java.util.*; public class Transfer { public static void main(String[] args) { Map mapint ...

数字与中文数字串互转

这里实现的是数字与中文数字串的互相转换,这里是一个简单的for循环版本,后面再写一个快速的版本。num2chinese数字转中文chinese2num中文转数字#include #include ...

Java实现浮点数转换成人民币读法字符串

这段时间,正值大四上学期,同学们都各种忙着找工作,前一段时间,寝室的一个搞Java的同学参加完笔试,回到寝室后,拿着笔试卷子问我一道编程题:实现浮点数转换成人民币读法字符串的小程序。也忘了当时在忙什么...

java实战1——浮点数转人民币读法

为了学习安卓,现在开始从C++角度来学习Java,现在看到了《疯狂java讲义》的第四章,里面有个字符串转人民币的例子,书上没做完,于是把其补充完善。其中最难的部分就是根据零在不同位置,具有不同行为。...

正整数的中文读法(C++ Python)

基本思路(1)数字到中文的映射(2)每四位作为一个单元处理(3)从简入手,逐步细化映射 中文读法中会出现的汉字如下: 零;一、二、… 、九;十、百、千;万、亿 零比较特殊,单独存储 一、二、…、九是...

将阿拉伯数字转为中文大写读法

/** * 问题描述: * 将一个键盘输入的数字转化成中文输出,使用异常捕获输入的非法字符。 * (例如:输入:1234567 输出:一百二拾三万四千五百六拾七) * ...

我的java之路——按照电话机表盘数字与字符的对应关系(这里用数字1而不是0代表空格),用数字串匹配字符串

/* * 需求:按照电话机表盘数字与字符的对应关系(这里用数字1而不是0代表空格),用数字串匹配字符串 * 思路:获得用户输入,判断是不是纯数字串,如果是这拼接正则表达式,和各个字符串匹配 * ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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