【java金额输入转换】任意字符串转为Long型金额(单位:分)

package com.tuwer;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Objects;

/**
 * @author 土味儿
 * Date 2022/11/7
 * @version 1.0
 */
@SpringBootTest
public class MyTest {
    private Long getPriceOfFen(String moneyStr) {
        if (Objects.isNull(moneyStr) || moneyStr.length() < 1) {
            return 0L;
        }

        // 合法字符
        String model = ".0123456789";
        // 如果有。时,把 。替换为小数点.
        moneyStr = moneyStr.replaceAll("\\。", "\\.");
        // 去除非法字符
        StringBuilder newMoneyBuilder = new StringBuilder();
        for (int i = 0; i < moneyStr.length(); i++) {
            char c = moneyStr.charAt(i);
            // 判断当前字符是否合法
            int b = model.indexOf(c);
            if (b >= 0) {
                newMoneyBuilder.append(c);
            }
        }
        // 新的金额字符串;不含非法字符
        String newMoney = newMoneyBuilder.toString();
        if (newMoney.length() < 1) {
            return 0L;
        }

        // 整数、小数部分
        Long x, y;

        // 是否有小数点.
        int a = newMoney.indexOf(".");

        // 有小数点,且小数点不在第一位
        if (a > 0) {
            // 整数部分
            x = Long.parseLong(newMoney.substring(0, a));
            // 小数部分
            // 取小数点及后面的所有字符(可能有多个小数点)
            String l = newMoney.substring(a);
            // 把所有小数点替换为空
            l = l.replaceAll("\\.", "");
            // 如果l的长度大小2时,只取两位
            if (l.length() > 2) {
                l = l.substring(0, 2);
            }
            if (l.length() < 1) {
                l = "0";
            }
            if(l.length() == 1){
                l = l + "0";
            }
            y = Long.parseLong(l);
        }
        // 有小数点,且小数点在第一位
        else if (a == 0) {
            x = 0L;
            // 把所有小数点替换为空
            newMoney = newMoney.replaceAll("\\.", "");
            // 如果newMoney的长度大小2时,只取两位
            if (newMoney.length() > 2) {
                newMoney = newMoney.substring(0, 2);
            }
            if (newMoney.length() < 1) {
                newMoney = "0";
            }
            if (newMoney.length() == 1) {
                newMoney = newMoney + "0";
            }
            y = Long.parseLong(newMoney);
        }
        // 没有小数点
        else {
            x = Long.parseLong(newMoney);
            y = 0L;
        }

        // 元转为分
        return x * 100 + y;
    }

    @Test
    public void test() {
        String m = "d w s 在人枯002.13des.322dk ls w s 。不髑要人要";

        System.out.println("【原始字符串】" + m);
        System.out.println("【转换后】" + getPriceOfFen(m));
    }
}

【原始字符串】d w s 在人枯002.13des.322dk ls w s 。不髑要人要
【转换后】213

你可能感兴趣的:(Java,java,开发语言)