黑马程序员技术交流社区
标题:
输入RMB,转换为中文字符的格式
[打印本页]
作者:
梁志斌
时间:
2016-1-24 16:52
标题:
输入RMB,转换为中文字符的格式
金额转换,阿拉伯数字转换成中国传统形式。
这道题想到我的小脑袋都要爆了,哪个大神,给点提示,或者给下参考
作者:
jacky左
时间:
2016-1-24 23:14
这题太变态了,新手就不要想了.我们导师说,这题他都不愿意写,有这些时间不如多敲一些代码
作者:
jacky左
时间:
2016-1-24 23:16
import java.util.Scanner;
/**
* 31、 金额转换,阿拉伯数字转换成中国传统形式。例如:101 000 001 010转换为壹仟零壹拾亿 零 壹仟零壹拾 圆整
*
* 涉及知识点:
* 1、String的相关操作
* 2、正则表达式的应用
*
* 思路:
* 1、观察规律,阿拉伯数字转化成汉字,每一个都有自己的单位,声明一个StringBuilder,从第一位开始添加单位以及数字
* 2、1001壹仟零壹,1100壹仟壹佰,1010壹仟零壹拾,1101壹仟壹佰零壹,可以看出只要两个非零数字中间有零就要写个零
* 3、最后,做一些替换
* */
public class demo31 {
private static final char[] number = {'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
private static final char[] units = {'圆','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟'};
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
long num = sc.nextLong();
if(num==0){
break;
}
String str = convert(num);//转换
System.out.println(str);
}
sc.close();
}
private static String convert(long money) throws Exception{
StringBuilder sb = new StringBuilder();
int index = 0;
while(money!=0){
sb.insert(0, units[index++]);//位数
sb.insert(0, number[(int)(money%10)]);//数字
//int范围-65536~65535太小
money = money/10;
}
//正则表达式
return sb.toString().replaceAll("零[仟佰拾]", "零").replaceAll("零+万", "万")
.replaceAll("零+亿", "亿").replaceAll("亿万", "亿零")
.replaceAll("零+", "零").replaceAll("零圆", "圆");//零+是多个零
}
}
作者:
jacky左
时间:
2016-1-24 23:17
jacky左 发表于 2016-1-24 23:16
import java.util.Scanner;
/**
答案送上,愿意研究的话就去研究把,反正我是没兴趣了
作者:
我爱睡觉
时间:
2016-1-25 13:57
需要考虑的太多,我也回去想想。这个问题涉及面试比较广的。。。一同学习
作者:
the_way
时间:
2016-1-25 16:29
不明觉厉
作者:
shihao
时间:
2016-1-25 18:00
思路是 从个位数开始逐个转换,最后用正则表达式校正
作者:
迷茫不堪的年纪
时间:
2016-1-25 23:16
浪费时间
作者:
rushing
时间:
2016-1-25 23:25
看着都有点头疼
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2