首页 > 编程语言 >Java将数字转换为人民币大写

Java将数字转换为人民币大写

时间:2024-01-24 18:22:05浏览次数:38  
标签:resultStrBuld 转换 String 大写 else length substrNum Java append

Java将数字转换为人民币大写

十千亿以内:RMBConversion.java

public class RMBConversion {  
  
    private static final String[] CN_NUM = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };  
    private static final String[] CN_UNIT = { "", "拾", "佰", "仟" };  
    private static final String[] CN_SECTION = { "", "万", "亿", "万亿" };  
    private static final String[] CN_SYMBOL = { "元", "拾元", "佰元", "仟元", "万元", "亿元", "万亿" };  
  
    public static void main(String[] args) {
		
        System.out.println(args[0]);
		String s1 = dealMoney(args[0]);
        System.out.println(s1);
    }
	
    public static String dealMoney(String inputStr) {
        StringBuilder resultStrBuld = new StringBuilder();
        String[] split = inputStr.split("\\.");
        String intStr = split[0];
        //@@@@@@@@@@处理整数部分
        try {
            //四位间隔的大单位
            String BigUnit[] = {"亿", "万", "元"};
            //四位之间的小单位
            String smallUnit[] = {"千", "百", "十", ""};
            String[] upNum = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
            if (intStr.matches("^[0]+$")) {
                //如果全是输入的 0 返回
                if(split.length==2 && split[1].matches("^[0]+$")){
                    return "零元零角零分";
                }
            }
            //去掉以整数部分为0开头的情况 eg:0000456 return 456
            intStr = cutFrontZeros(intStr);
            //按照四位进行处理进行转换,length是处理的次数
            int length = intStr.length() / 4;
            if ((intStr.length() % 4) > 0) {
                //有余数次数+1
                length++;
            }
            //获取截取的前索引
            int indexS = 0;
            int indexE = 0;
            //处理四位间隔数据
            for (int i = 0; i < length; i++) {
                //取大单位的索引
                int Bindex = 0;
                if (length < 3) {
                    Bindex = i + (3 - length);
                } else {
                    Bindex = i;
                }
                //分割索引
                if (i == 0 && ((intStr.length() % 4) > 0)) {
                    indexE = intStr.length() % 4;
                } else {
                    indexE = indexE + 4;
                }
                String substrNum = intStr.substring(indexS, indexE);
                //处理四位之间数据
                for (int j = 0; j < substrNum.length(); j++) {
                    //判断截取字符串之后是否全是0
                    boolean subStrAllzero = false;
                    //substrNum后面全是0
                    if (substrNum.substring(j, substrNum.length()).matches("^[0]+$")) {
                        subStrAllzero = true;
                    }
                    //判断这一位是否是0
                    boolean thisCharIs = false;
                    if ("0".equals(String.valueOf(substrNum.charAt(j)))) {
                        thisCharIs = true;
                    } else {
                        thisCharIs = false;
                    }
                    //取小单位索引
                    int Sindex = 0;
                    if (substrNum.length() != 4) {
                        Sindex = Sindex + (4 - substrNum.length() + j);
                    } else {
                        Sindex = j;
                    }
                    /*拼接数字对应汉字
                        如果后面全是0拼接单位,并结束循环(需要剔除0000这种情况)
                        否则拼接大写汉字,如果上一位且这一位是零不拼接汉字
                        */
                    if (subStrAllzero) {
                        if (j != 0 || i == (length - 1)) {
                            resultStrBuld.append(BigUnit[Bindex]);
                        }
                        break;
                    } else { //if((!lastCharIs || !thisCharIs))
                        if (resultStrBuld.toString().endsWith("零") && thisCharIs) {
 
                        } else {
                            resultStrBuld.append(upNum[Integer.parseInt(String.valueOf(substrNum.charAt(j)))]);
                        }
                    }
                    /*
                     * 拼接单位
                     *   如果是最后一位,拼接大单位
                     *   否则拼接小单位
                     *       如果上一位是零则不拼接单位,等非零情况拼接单位
                     * */
                    if ((j == (substrNum.length() - 1))) {
                        resultStrBuld.append(BigUnit[Bindex]);
                    } else {
                        if (!resultStrBuld.toString().endsWith("零")) {
                            resultStrBuld.append(smallUnit[Sindex]);
                        }
                    }
                }
                //重置字符串截取的开始索引。
                indexS = indexE;
            }
            //@@@@@@@@@@处理整数部分 END
 
            //@@@@@@@@@@处理小数部分
            if (split.length == 2) {
                String point = split[1];
                if (point.length() == 1) {
                    resultStrBuld.append(upNum[Integer.parseInt(String.valueOf(point.charAt(0)))]).append("角").append("零分");
                } else {
resultStrBuld.append(upNum[Integer.parseInt(String.valueOf(point.charAt(0)))]).append("角").append(upNum[Integer.parseInt(String.valueOf(point.charAt(1)))]).append("分");
                }
            } else {
                resultStrBuld.append("整");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "null";
        }
        return resultStrBuld.toString();
    }
	
	    /**
     * 去掉第一位为0的情况
     * 0000000001.02 = 1.02
     *
     * @param str
     * @return
     */
    public static String cutFrontZeros(String str) {
        //如果全为整数部分全为0,保留一个0
        if("".equals(str.replaceAll("0",""))){
            return "0";
        }
        String s = str;
        if (str.startsWith("0")) {
            s = cutFrontZeros(str.substring(1, str.length()));
        }
        return s;
    }
	
}

标签:resultStrBuld,转换,String,大写,else,length,substrNum,Java,append
From: https://www.cnblogs.com/muphy/p/17985479

相关文章

  • Java中为什么hashcode与equals要一起重写?
    首先,hashcode与equals并不是一定要一起重写的。先说结论:在用到哈希相关的集合时,作为key的类一定要重写hashcode与equals方法,因为这些集合在计算下标时,使用到了key的hashcode方法,并且在判断key是否已经存在时,使用到了equals方法。如果不重写会允许多个相同的key插入,因此需要同......
  • 运用ETLCloud快速实现数据清洗、转换
    一、数据清洗和转换的重要性及传统方式的痛点1.数据清洗的重要性数据清洗、转换作为数据ETL流程中的转换步骤,是指在数据收集、处理、存储和使用的整个过程中,对数据进行检查、处理和修复的过程,是数据分析中必不可少的环节,对于保证数据的质量和可用性具有重要的意义。2.传统方式存在......
  • 基于javaweb的学生二手书籍交易平台的设计与实现
    1.立题意义随着互联网技术的快速发展,网络时代的到来,网络信息也将会改变当今社会。各行各业在日常企业经营管理等方面也在慢慢的向规范化和网络化趋势汇合[1]。校园二手书交易系统的信息化程度体现在将互联网与信息技术应用于经营与管理,以现代化工具代替传统手工作业[2]。无疑,使用......
  • 基于java的水果网上商城的开发与设计
    一、研究背景和意义(一)研究背景随着互联网技术的迅猛发展,现在互联网已从单纯的学术科研向综合性商业网络发展,人们对于互联网技术的要求已不单单是浏览一下网页、收发电子邮件等简单的网络应用。高速发展的互联网技术为在线购物的发展提供了强大的动力,同时,在线购物的环境已经逐步得......
  • java代码通过百度获取第一条搜索结果代码以及注意事项
    导入依赖:<dependency><groupId>io.github.bonigarcia</groupId><artifactId>webdrivermanager</artifactId><version>4.4.3</version></dependency><de......
  • [转]JavaScript:解决计算精度问题/mathjs/bignumber.js/big.js/decimal.js
    原文地址:JavaScript:解决计算精度问题/mathjs/bignumber.js/big.js/decimal.js_js计算精度问题-CSDN博客一、计算精度现象举例举例1、加法 举例2、减法 举例3、乘法 举例3、除法 二、JS为什么会有计算精度的问题JavaScript内部只有一种数字类型Number,也就是说,Java......
  • 【中介者模式(Mediator)】使用Java实现中介者模式
    引言中介者,何为中介者,顾名思义就是我们的在处理A和B之间的关系的时候,引入一个中间人,来处理这两者之间的关系,例如生活中我们需要去租房,买房,都会有中介,来处理房东和租客之间的协调关系,这个就是中介者,落实到具体的代码中呢,就像我们的Controller可能会依赖很多的Service层面......
  • 使用Java中的HttpClient进行网络请求
    使用Java中的HttpClient进行网络请求是一种常见的操作,它可以帮助我们轻松地发送HTTP请求并获取响应。以下是使用Java中的HttpClient进行网络请求的基本步骤:1. 添加依赖:首先,确保您的项目中包含了HttpClient的依赖。如果您使用的是Maven项目,请在pom.xml文件中添加以下依赖:2. xml复......
  • Java Chassis 3技术解密:易扩展的多种注册中心支持
    原文链接:https://bbs.huaweicloud.com/blogs/420748JavaChassis的早期版本依赖于ServiceCenter,提供了很多差异化的竞争力:接口级别转发。通过注册中心管理微服务的每个版本的元数据,特别是契约数据。结合契约数据,能够实现版本级别的路由能力。比如一个微服务存在v1和v2两......
  • Java中的死锁问题及其解决方案
    第1章:引言大家好,我是小黑。今天咱们来聊聊Java编程中一个让人头疼的问题——死锁。你可能听说过死锁,或者在编码时不小心遇到过。死锁就像是交通堵塞,在程序的世界里,它会让线程陷入无尽的等待,导致程序无法正常运行。在Java并发编程中,理解死锁并学会如何处理它是非常关键的。接下......