题解 | #阿拉伯数字转中文#
阿拉伯数字转中文
https://www.nowcoder.com/practice/6eec992558164276a51d86d71678b300
import java.util.*; public class Solution { public static void main(String[] args) { String s = new Solution().num2cn(1000000007); System.out.println(s); System.out.println(new Solution().trans4(new char[]{'0','0','0','7'})); } StringBuilder res; String[] bigUnit={"","万","亿"}; String[] shu={ "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" }; String[] unit={"","十","百","千"}; /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return string字符串 */ public String num2cn (int n) { res=new StringBuilder(); // one trick if(n==0){ return "零"; } if(n<0){ res.append("负"); n=-n; } List<String> duan4=new ArrayList<>(); StringBuilder n2str = new StringBuilder(String.valueOf(n)); int strLen = n2str.length(); // one trick while(strLen >4){ // n==0需要单独考虑 duan4.add(n2str.substring(strLen-4).toString()); n2str.delete(strLen-4,strLen); strLen-=4; } if(strLen>0) duan4.add(n2str.toString()); for(int i=duan4.size()-1;i>=0;i--){ String cur=trans4(String.valueOf(duan4.get(i)).toCharArray()); String bU=bigUnit[i]; // one trick if("".equals(cur)) bU=""; res.append(cur).append(bU); } // one trick return res.toString().replaceAll("^一十","十"); } public String trans4 (char[] duan){ StringBuilder cur=new StringBuilder(); for(int i=0;i<duan.length;i++){ String curShu=shu[duan[i]-'0']; String u=unit[duan.length-i-1]; // one trick if("零".equals(curShu)){ u=""; } cur.append(curShu).append(u); } return handleZero(cur.toString()); } String handleZero(String s){ //two trick s=s.replaceAll("零+","零"); if(s.endsWith("零")) return s.substring(0,s.length()-1); return s; } }