你这样写有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("零+", "零");
- }
- }
复制代码 |