[AppleScript] 纯文本查看 复制代码 package com.itheima;
import java.util.Scanner;
/**
* 目的:金额转换,阿拉伯数字转换成中国传统形式。
*
* @author liuwei
* @version V1.0
*
*/
/*
* 分析:把数字转换成金额,首先应该考虑这个数字的大小(进行分段判断), 1,首先判断数字的范围 2,每一个数字进行转换 3,字符串进行拼接
* 壹贰叁肆伍陆柒捌玖拾
*/
public class Test9 {
public static void main(String[] args) {
// 键盘录入一个数字
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字:");
long num = sc.nextLong();
// 创建一个StringBuilder 用于接收对象
StringBuilder sb = new StringBuilder();
// 分段进行判断 小于1万
if (num < 10000) {
sb = convert1(num);
sb.append("整");
System.out.println(sb);
} else if (num < 100000000) {
sb = convert2(num);
sb.append("整");
System.out.println(sb);
} else if (num < Long.MAX_VALUE) {
sb = convert3(num);
sb.append("整");
System.out.println(sb);
} else {
System.out.println("您输入的数字超出了范围");
}
}
/**
* 把小于1万以下的数字转换成字符串
*
* @param num
*/
private static StringBuilder convert1(long num) {
StringBuilder sb = new StringBuilder();
String str = new String();
// 定义成字符数组,是因为可以直接通过索引值,获取指定字符串,比switch语句更好
String[] weiStr = { "", "拾", "佰", "仟", "万", "亿" };
String[] numStr = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
// count 用于记录索引位置,方便查找对应的 数字 转化成汉字
int count = 0;
char[] chs = String.valueOf(num).toCharArray();
for (int x = 0; x < (chs.length); x++) {
// 由于 0 的读法不同需要特别对待,读0 时候不需要加千 百等字样。
if (num % 10 == 0) {
// String s1 = weiStr[count++];
count++;
String s2 = numStr[(int) (num % 10)];
num = num / 10;
str.contains(s2);
sb.append(s2);
} else {
String s1 = weiStr[count++];
String s2 = numStr[(int) (num % 10)];
num = num / 10;
str.concat(s1).concat(s2);
sb.append(s1).append(s2);
}
}
// 为了使用 sb 不具备的替换方法,进行转化成 字符串,替换完成,在转化成 sb
str = sb.toString();
// 如果有多个零,只读一个零
while (str.contains("零零")) {
str = str.replace("零零", "零");
}
// 不能以零结尾,使用startsWith,是因为,读取的时候是倒着添加到字符串的。
if (str.startsWith("零")) {
str = str.substring(1, str.length()).trim();
}
sb = new StringBuilder(str);
// 把字符串的顺序改过来。
return sb.reverse();
}
/**
* 把1万以上1亿以下的数字转换成字符串
*
* 分成两个部分,一万以下,使用上一个方法读,加一个万字
*
* @param num
* @return
*/
private static StringBuilder convert2(long num) {
StringBuilder sb = new StringBuilder();
sb.append(convert1(num / 10000)).append("万")
.append(convert1(num % 10000));
return sb;
}
/**
* 把1亿以上的数字转换成字符串
*
* 分成两个部分,一亿以下,使用上一个方法读,加一个亿字
*
* @param num
* @return
*/
private static StringBuilder convert3(long num) {
StringBuilder sb = new StringBuilder();
sb.append(convert2(num / 100000000)).append("亿")
.append(convert2(num % 100000000));
// 如果万位置上 没有数值,就把 万位去掉
String str = sb.toString();
while (str.contains("零万")) {
str = str.replace("零万", "");
}
sb = new StringBuilder(str);
return sb;
}
}
这是我自己做的,我自己也知道有些地方有问题,仅供参考 |