题解 | #人民币转换#
人民币转换
https://www.nowcoder.com/practice/00ffd656b9604d1998e966d555005a4b
import java.util.HashMap;
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
StringBuilder RMB_ZH = new StringBuilder();
RMB_ZH.append("人民币");
String[] groupUnit = {"亿万亿", "万万亿", "万亿", "亿", "万", "元"};
String[] groupInnerUnit = {"仟", "佰", "拾", ""};
String[] numZh = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
String[] decimalUnit = {"角", "分", "厘", "毫"};
// 待处理字符
String num = scanner.nextLine();
// 按 . 拆分成两部分
// 处理小数部分的标识
boolean decimalHandleFlag = num.contains(".");
String[] parts = num.split("\\.");
StringBuilder intPart = new StringBuilder(parts[0]);
String decimalPart = decimalHandleFlag ? parts[1] : null;
//获取总组数
int totalGroup = (intPart.length() + 3) / 4;
// 字符填充,将整个串设置为4的整倍数
int remain = intPart.length() % 4;
int paddingNum = remain == 0 ? 0 : 4 - remain;
for (int i = 0; i < paddingNum; i++) {
intPart.insert(0, "*");
}
// ------------------------ 处理整数部分 ----------------------------------------
// 分组切分序号
int partIdx = 0;
// 按组处理整数部分
for (int i = groupUnit.length - totalGroup; i < groupUnit.length; i++) {
String group = intPart.substring(partIdx * 4, (partIdx + 1) * 4);
String partBuffer = "";
for (int idx = 0; idx < group.length(); idx++) {
char c = group.charAt(idx);
if (c == '*') {
continue;
}
// 保证在千 百 拾之前不会出现“零”
String unit = idx < 3 && c == '0' ? "" : groupInnerUnit[idx];
String numStr = c == '1' && unit.equals(groupInnerUnit[2]) ? "" : numZh[c - '0'];
partBuffer = partBuffer + numStr + unit;
}
// 处理以”零”开头
if (partBuffer.startsWith("零零零零")) {
partBuffer = partBuffer.replaceFirst("零零零零", "");
} else if (partBuffer.startsWith("零零零")) {
partBuffer = partBuffer.replaceFirst("零零零", "零");
} else if (partBuffer.startsWith("零零")) {
partBuffer = partBuffer.replaceFirst("零零", "零");
}
//
// 处理已”零“结尾的字符
while (true) {
if (partBuffer.endsWith(numZh[0])) {
partBuffer = partBuffer.substring(0, partBuffer.length() - 1);
} else {
break;
}
}
// 如果该组没有字符串则不进行拼接
if (partBuffer.length() > 0) {
RMB_ZH.append(partBuffer);
RMB_ZH.append(groupUnit[i]);
}
// 处理下一组
partIdx++;
}
// -----------------------------处理小数部分------------------------------------
if (decimalHandleFlag) {
for (int i = 0; i < decimalPart.length(); i++) {
char c = decimalPart.charAt(i);
if (!(c == '0')) {
RMB_ZH.append(numZh[c - '0']).append(decimalUnit[i]);
}
}
} else {
RMB_ZH.append("整");
}
System.out.println(RMB_ZH);
}
}

