600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 转换阿拉伯数字为人名币大写

转换阿拉伯数字为人名币大写

时间:2019-11-13 15:16:46

相关推荐

转换阿拉伯数字为人名币大写

转换阿拉伯数字为人名币大写

这是本周面试的一道题,当时在现场没做出来~~~,回来之后,三下两除二就弄出来了,尬!!!

先贴下代码把:(如有错或者好的解决方案,还望大佬提出,小弟不胜感激🤭)

package com.lql.test.day_05;import java.math.BigDecimal;import java.util.Scanner;/*** @author :BalalaEnergy* @date :Created in /3/12 22:02* @description:* @modified By:*/public class TestConvertRMBNum {private static final String[] RMB_HAN = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};private static final String[] RMB_DW = {"圆", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿"};private static final String[] RMB_DW_POINT = {"角", "分"};private static final String ZERO_NUM_STR = "^(0*)+(\\.[0]{1,2})?$";private static final String ZERO_NUM_REGEX = "([0]{1,2})?$";/*** 亿级数最大长度*/private static final int Y_LEN = 12;/*** ASCII 0*/private static final int ASCII_NUM_ZERO = 48;/*** 最大精度*/private static final int POINT_MAX_LEN = 2;/*** 小数点*/private static final String POINT = ".";/*** 错误信息*/private static final String ERROR = "error";private static final String WHOLE_STR = "整";private static final String ZERO_ZERO = "00";public static String outRMB(String RMB) {// 去除00.00这种数据Pattern r = pile(ZERO_NUM_STR);Matcher m = r.matcher(RMB);if (m.matches()) {return RMB_HAN[0] + RMB_DW[0] + WHOLE_STR;}boolean isPointNum = false;// 1、参数校验if (RMB.contains(POINT)) {isPointNum = true;}char[] chars = RMB.toCharArray();for (int i = 0; i < chars.length; i++) {if (chars[i] == '.') {continue;}int num = Integer.valueOf(chars[i]) - ASCII_NUM_ZERO;if (!(num >= 0 && num <= 9)) {return "error: 请输入0~9的阿拉伯数字,请重新输入!";}}if (RMB.length() > Y_LEN) {return "error:您输入的参数太长,请重新输入!";}if (isPointNum) {if (RMB.substring(RMB.indexOf(POINT) + 1).length() > POINT_MAX_LEN) {return "error:最大精度仅支持两位,请重新输入!";}}// 2、装换数字// 2.1 分割小数// 整数金额String strNum;// 小数金额String strPoint;// 整数汉字String strHanWhole;// 小数汉字String strHanPoint = "";if (isPointNum) {strNum = RMB.substring(0, RMB.indexOf(POINT));strHanWhole = convertNumToHanZi(strNum);strPoint = RMB.substring(RMB.indexOf(POINT) + 1);r = pile(ZERO_NUM_REGEX);m = r.matcher(strPoint);if (!m.matches()) {strHanPoint = convertNumToHanZi(strPoint);}} else {strNum = RMB;strHanWhole = convertNumToHanZi(strNum);}// 3、添加单位strHanWhole = addDW(strHanWhole, 0);if (strHanPoint != "") {strHanPoint = addDW(strHanPoint, 1);}// 去除小数后的末位零if (strHanPoint != "" && strHanPoint.endsWith(RMB_HAN[0])) {strHanPoint = strHanPoint.substring(0, strHanPoint.length() - 1);}if (strHanPoint == "" || ZERO_ZERO.equals(strHanPoint)) {strHanWhole = strHanWhole + WHOLE_STR;}// 角加整if (strHanPoint.endsWith(RMB_DW_POINT[0])) {strHanPoint = strHanPoint + WHOLE_STR;}if (strHanPoint.endsWith(RMB_HAN[0])) {strHanPoint = strHanPoint.substring(0, strHanPoint.length() - 1);}if (strHanWhole.endsWith(RMB_HAN[0]) && strHanPoint.startsWith(RMB_HAN[0])) {strHanWhole = strHanWhole.substring(0, strHanWhole.length() -1);}return strHanWhole + strHanPoint;}/*** 通过传递进来的数字转换为中文汉字** @param nums* @return*/public static String convertNumToHanZi(String nums) {String hanZiNum = "";for (int i = 0; i < nums.length(); i++) {int value = Integer.valueOf(nums.substring(i, i + 1));for (int j = 0; j < RMB_HAN.length; j++) {if (value == j) {hanZiNum += RMB_HAN[j];break;}}}return hanZiNum;}/*** 通过传递的数值添加单位** @param str 字符串* @param type 0:整数 1:小数* @return*/public static String addDW(String str, int type) {String temp = "";boolean last_zero = false;int zero_num = 0;int len = str.length();for (int i = 0; i < str.length(); i++) {// 4、多个相邻的零只显示一个if (str.substring(i, i + 1).equals(RMB_HAN[0])) {zero_num++;} else {zero_num = 0;}if (zero_num > 1) {if (len == 4) {temp = temp.substring(0, temp.length() - 1) + RMB_DW[len];zero_num = 0;}--len;continue;}if (zero_num == 1) {temp += str.substring(i, i + 1);--len;continue;}switch (type) {case 0:temp += str.substring(i, i + 1) + RMB_DW[--len];break;case 1:temp += str.substring(i, i + 1) + RMB_DW_POINT[i];break;default:break;}}return temp;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入一金额:");BigDecimal num;try {num = sc.nextBigDecimal();String nums = num.toString();String msg = outRMB(nums);if (msg.contains(ERROR)) {System.out.println("提示:" + msg.substring(msg.indexOf(":") + 1));} else {System.out.println("当前金额为:" + outRMB(nums));}} catch (Exception e) {System.out.println("提示:您输入的参数有误,请输入0~9的阿拉伯数字");}}}

下面说一下当时的面试情况~

​ 最近在找工作,于是面试了很多家公司,每个公司的面试题呢也做了很多,基本没什么太大的难度(毕竟面试的是初级开发人员),然后就面试有一家的题就是要求把阿拉伯数字转换为人名币大写,我以为是和之前一样,笔试,结果是上机敲代码。。。,这就算了,提供的电脑是Linux系统😂~~,提供的编译环境呢是eclipse,就是对于我平时来说用的不多的东西,就很尴尬,上机的地方是在一堆开发的后面,当时就感觉压力山大,生怕做不出来后面的大佬投来菜鸡的目光,结果,果然没做出来啊😂,而且还耗了很多时间 。。。

​ 总之就一个字:尬!!😂

总结:

​ 最后吧,个人的自身实力有待还是有待提高,这周面试的很多,也拿到了几个简历,下下周就要奔向新的战场!周五的时候和以为大佬交谈的时候大佬给我提了一些建议:

认清楚学习的方向

之前的话,自己一直想的是学习些新技术就能够成为大佬,但其实真正的大佬是对看问题的深度研究,对细节的把控与掌握,新技术得学,但更重要的是基础与细节,知识都是连贯的,修万里长城得一砖一瓦的搭建!!

找到自己的职业规划

大佬问到这个问题的时候,其实整个人都是蒙的,因为我并不理解其意思,现在想的就是提升技术,然后挣更多的钱😂,就现在也还是蒙的,我觉得这不是一件简单的事,因为的我对未来还是充满了想象!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。