锁定老帖子 主题:Java试题 之 阿拉伯数字转换成中文数字
精华帖 (0) :: 良好帖 (0) :: 新手帖 (10) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-04
之前见过一道题觉着挺有意思
今天没什么事就回想着做了一把 拿出来和大家一起看看 希望各位能给点意见 一起讨论下 题目大概: 将一组阿拉伯数字转换成中文大写数字 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(); } } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-07-08
本方法支持无穷大的数字哦 只要内存里JVM放的下的就可以
|
|
返回顶楼 | |
发表时间:2009-07-12
int j = Integer.parseInt(temp.substring(temp.length() - 1, temp.length()));
有这句你就大不了了 |
|
返回顶楼 | |
发表时间:2009-07-13
哈哈 原来有BUG 才有人回复 果然灵验 哈
|
|
返回顶楼 | |
发表时间:2009-07-13
刚刚看到,稍微思考一下,随便说说。
因为中文计数有点比较简单,比如第四位后面加千,第五位加万,第六位后面加十万,有一定规律可循。 可以分两步走,第一步是把阿拉伯数字替换成汉字 第二步是顺序循环,第几位后面加十或者百,零的的时候不加。到万过后,变成前面再加个十 |
|
返回顶楼 | |
发表时间:2009-07-14
有问题!
比如 100000000 就错了!! 应该是壹亿 却说一亿万!!! |
|
返回顶楼 | |
发表时间:2009-07-17
最后修改:2009-07-17
楼上果然强悍 是个有心人啊 其实上面的代码很多BUG 的 现在看代码的人少了 我想赚点人气的 结果 写的错了 也没人看或者没看出来 结果没人回复我 :(
现需原本的代码的可以给我留言 一起研究一下子 有问题欢迎提啊 ! |
|
返回顶楼 | |
发表时间:2009-07-17
顺便提一下子 我的用户名 很不错吧 嘎嘎! 还有头像也不耐! 赞一个 :)
|
|
返回顶楼 | |
发表时间:2009-07-19
多个小数点就错误了
|
|
返回顶楼 | |
发表时间:2009-07-25
smilerain 写道 多个小数点就错误了
哈哈 不好意思 不是我错了 是你理解错了 我没说支持小数滴~。~ |
|
返回顶楼 | |