黑马程序员技术交流社区
标题:
金额转换,阿拉伯数字转换成中国传统形式。 * 例如:1010...
[打印本页]
作者:
只为编程
时间:
2016-4-2 14:14
标题:
金额转换,阿拉伯数字转换成中国传统形式。 * 例如:1010...
要求各种情况都可以实现 如1000_0001_1010 1001_0101_1100 1010_0000_1010
作者:
菊花爆满山
时间:
2016-4-2 14:14
这是一道入学测试题吧 我当初写的你可以看看
package com.itheima;
import java.util.Scanner;
/*
*
* */
public class Test10 {
private static Scanner sc;
public static void main(String[] args) {
sc = new Scanner(System.in); //定义一个文本扫描器 用于接收标准输入流的数据
String str = sc.nextLine();
if("".equals(str) || !str.matches("\\d+")) {
throw new RuntimeException("字符串内容为空或含有非阿拉伯数字字符"); //若该数据为空或者含有非阿拉伯数字字符则抛出运行时异常
}
System.out.println(changeNum(str).concat("圆整").replaceAll("零圆整", "圆整"));
sc.close();
}
public static String changeNum(String str) {
String[] num = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; //定义两个字符数组用于存储阿拉伯数字的汉字表现字符 和 单位表现字符
String[] arr = {"拾","佰","仟"};
StringBuilder sb = new StringBuilder();
if(str.length() < 5) { //首先分析该数在万位以下
for(int x = str.length()-1; x>=0; x--) { //从个位数开始遍历
char ch = str.charAt(x);
int n = Integer.parseInt(ch+"");
if(n == 0 || x == str.length()-1) { //判断该位数是否为零或者是否是个位
if(n == 0 && x == str.length()-1) { //若是零且是个位 就不做任何处理
;
}else {
sb.insert(0, num[n]); //若是个位 但不是零 就将该数的汉字字符存储进字符串缓冲区
}
}else {
sb.insert(0, num[n]+arr[str.length() - x - 2]); //若该位数不是零且不是个位 就将该数的汉字字符和单位存储进字符串缓冲区
}
}
}else if(str.length() < 9) { //分析该数在亿位以下
int k = str.length() - 4;
String s1 = changeNum(str.substring(0, k)); //高位
String s2 = changeNum(str.substring(k, str.length())); //低位
StringBuilder sb2 = new StringBuilder(s1);
if(s1.endsWith("零")) { //若高位返回的字符串最后一个字符是零 就将零字符替换成萬字符
if(s1.length() != 1) { //特殊情况
sb2.setCharAt(s1.length() - 1, '萬');
}else {
; //若高位全为零 那么不做任何处理
}
}else{
sb2.insert(s1.length(), '萬'); //若高位返回的字符串最后一个字符不是零 就在字符串最后位置上加上萬字符
}
return sb2.toString() + s2; //最后返回字符串
}else if(str.length() > 8) { //再次分析该数在亿位及以上
int k = str.length() - 8;
String s1 = changeNum(str.substring(0, k)); //高位
String s2 = changeNum(str.substring(k, str.length())); //低位
StringBuilder sb2 = new StringBuilder(s1);
if(s1.endsWith("零")) {
sb2.setCharAt(s1.length() - 1, '亿');
}else {
sb2.insert(s1.length(), '亿');
}
return sb2.toString() + s2;
}
return sb.toString().replaceAll("零+", "零");
}
}
复制代码
作者:
只为编程
时间:
2016-4-2 14:16
要求有明确的注释
作者:
ping3014
时间:
2016-4-2 17:55
day0402_shu.zip
2016-4-2 17:54 上传
点击文件名下载附件
6.23 KB, 阅读权限:
100
, 下载次数: 0
作者:
122754304
时间:
2016-4-2 19:54
利用split方法可以实现
作者:
doglovely
时间:
2016-4-3 17:58
都是神人呀!
作者:
aweilovemusic
时间:
2016-4-3 18:46
都是大神啊,我目前只想到字符数组里面的替换功能
作者:
LoveGG
时间:
2016-4-26 00:44
都是大神啊,厉害,我学过但是记不住代码了.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2