看到有同学在问,感觉挺有意思的,自己写了下
方式一
运用 if 判断, switch语句,三元运算符(代替了 if 语句,更加美观)
要考虑以下几种情况:
100 - 一百
101 - 一百零一
110 - 一百一十
001 - 不在范围
1000 - 不在范围
public class MyClass {
public static void main(String[] args) {
getString(678);
}
private static void getString(int i){
if (i > 999 || i< 100){
System.out.println("请输入100~999的正整数");
return;
}
int bai =i/100%10;
int shi =i/10%10;
int ge =i%10;
String b = getToString(bai).equals("零") ? "" : getToString(bai)+"百";
String s = getToString(shi);
s = b.equals("") && s.equals("零") ? "" : s;
String g = getToString(ge).equals("零") ? "" : getToString(ge);
if(g.equals("")){
s = s.equals("零") ? "" : s + "十";
}else {
s = s.equals("零") ? s : s + "十";
}
System.out.println(b+s+g);
}
private static String getToString(int i){
String s = "";
switch (i){
case 0:
s = "零";
break;
case 1:
s = "一";
break;
case 2:
s = "二";
break;
case 3:
s = "三";
break;
case 4:
s = "四";
break;
case 5:
s = "五";
break;
case 6:
s = "六";
break;
case 7:
s = "七";
break;
case 8:
s = "八";
break;
case 9:
s = "九";
break;
}
return s;
}
}
方式二
这个方式是我网上找到的,但是有些问题(900输出九百零零),我自己稍微改了一下,加了注释
public class MyClass {
public void convert(int number) {
//限制输入内容
if (number > 999 || number< 100){
System.out.println("请输入100~999的正整数");
return;
}
//数字对应的汉字
String[] num = {
"零","一","二","三","四","五","六","七","八","九"};
//单位
String[] unit = {
"","十","百"};
//将输入数字转换为字符串
String result = String.valueOf(number);
//将该字符串分割为数组存放
char[] ch = result.toCharArray();
//结果 字符串
String str = "";
//获取数组长度
int length = ch.length;
//循环
for (int i = 0; i < length; i++) {
//拿到对应的数字
int c = (int)ch[i]-48;
//不为0时获取中文以及添加单位
if(c != 0) {
str += num[c]+unit[length-i-1];
} else {
//下一个数字判断,目的是避免出现 九百零零的情况
if (i+1 < length) {
//下一个数字
int next = (int) ch[i + 1] - 48;
//当下一个数字为0时添加空字符,也就是啥也不加,否则添加零
if (next == 0) {
str += "";
} else {
str += num[c];
}
}
}
}
System.out.println(str);
}
@SuppressWarnings("resource")
public static void main(String[] args) {
new MyClass().convert(678);
}
}
以上两种方式亲测有效