黑马程序员技术交流社区
标题:
分享一道入学测试题
[打印本页]
作者:
wdhm5423
时间:
2015-3-4 00:01
标题:
分享一道入学测试题
金额转换,阿拉伯数字转换成中国传统形式。
例如:101000001010 转换为 壹仟零壹拾亿零壹仟零壹拾圆整
思路:
1、每一位对应一个单位,每一个数字对应一个数字中文大写形式,可以创建字符串数组,通过位数和数字对应字符串
2、按对应关系可以得带一串读法字符串,接下来对该字符串进行删减修正。
3、得到阿拉伯数字的中国传统形式。
*/
public class Test10 {
public static void main(String[] args) {
Long l = 101000001010L;
String str = l + "";// 转化为字符串
StringBuilder sb = new StringBuilder();// 字符串缓冲区
trans(str, sb);
String s = sb.toString();// 转化为字符,方便替换操作
// 对字符串进行修正
s = s.replaceAll("零仟", "零");
s = s.replaceAll("零佰", "零");
s = s.replaceAll("零拾", "零");
s = s.replaceAll("拾零", "拾");
s = s.replaceAll("佰零{2}", "佰");
s = s.replaceAll("仟零{3}", "仟");
s = s.replaceAll("亿零{4}万零{4}", "亿");
s = s.replaceAll("万零{4}", "万");
s = s.replaceAll("亿零{4}万", "亿零");
s = s.replaceAll("零+", "零");
System.out.println(s);
}
public static void trans(String str, StringBuilder sb) {
if ("".equals(str)) {// 判断是否已经没有数字
return;
}
String[] shuzi = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };// 数字对应大写
String[] danwei = { "圆整", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾",
"佰", "仟" };// 位数对应单位
int ns = Integer.parseInt(str.charAt(0) + "");// 取字符串的第一个数
int nd = str.length() - 1;// 由字符串的长度得到位数
sb.append(shuzi[ns]).append(danwei[nd]);// 把数字加位数构成字符串第一个位置的读法
str = str.substring(1);// 把已经读好的第一个位置删除
trans(str, sb);// 递归,读接下来的字符串的第一个位置
}
}
复制代码
作者:
ankje
时间:
2015-3-4 01:40
居然抢到沙发!!
作者:
liu1098
时间:
2015-3-4 07:39
递归貌似不是很简单啊。。
作者:
huangchunwei
时间:
2015-3-4 07:46
来学习学习。。
作者:
执念
时间:
2015-3-4 08:13
大爱啊:)
作者:
栗新岩
时间:
2015-3-4 08:22
看上去好厉害!!
作者:
whangchaojie
时间:
2015-3-4 09:11
还没学到,来看看
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2