黑马程序员技术交流社区
标题:
测试题10
[打印本页]
作者:
执剑人
时间:
2016-3-7 11:17
标题:
测试题10
10、金额转换,阿拉伯数字转换成中国传统形式。
例如:101000001010 转换为 壹仟零壹拾亿零壹仟零壹拾圆整
static String[] arr = {"亿","仟","佰","拾","万","仟","佰","拾","" };
static String[] crr = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
public static void main(String[] args) {
long yuan = 1220000;
String amount = String.valueOf(yuan);
int len = amount.length();
int unitsLen = arr.length;
String cuch = "";
for (int i = len - 1; i >= 0; i--) {
cuch = number(amount.charAt(i)) + unit(amount.charAt(i), unitsLen - len + i) +cuch;
}
cuch = cuch.replaceAll("零+","零");
cuch = cuch + "元整";
cuch = cuch.replaceAll("零万","万");
cuch = cuch.replaceAll("零元","元");
System.out.println(cuch);
}
private static String number(char number) {
return crr[Integer.parseInt(String.valueOf(number))];
}
private static String unit(char number, int pos) {
if(number == '0' && pos != arr.length - 5) {
return "";
}
return arr[pos];
}
这题考的是字符串的拼接!
作者:
wxf468907066
时间:
2016-4-8 17:30
大兄弟,厉害
作者:
lilipu1
时间:
2016-4-8 23:53
大兄弟,不错啊
作者:
wxf468907066
时间:
2016-4-13 22:50
发现bug不能输出一亿
作者:
菊花爆满山
时间:
2016-4-14 11:22
你这样写有BUG 看看我的代码 可以输入任何数
package com.itheima;
import java.util.Scanner;
/*
* 第十题:金额转换,阿拉伯数字转换成中国传统形式。
* 例如:101000001010 转换为 壹仟零壹拾亿零壹仟零壹拾圆整
*
* 思路:
*
* */
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-14 11:39
发现bug不能输出一亿
作者:
woaikk991100
时间:
2016-4-14 12:20
发现bug不能输出一亿,同上
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2