将数字转成中文 - Java

在日常开发中,我们经常会遇到将数字转换成中文的需求,比如金额大写、数字转中文表示等。在Java中,我们可以通过一些方法来实现这个转换过程。本文将介绍如何使用Java将数字转成中文,并通过代码示例来演示。

使用中文数字表示法

在中文中,数字有自己的表示方法,例如1对应一,10对应十,100对应一百等。我们可以通过一些规则来将阿拉伯数字转成中文数字表示。

public class NumberToChinese {
    
    private final static String[] CN_NUMBERS = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
    private final static String[] UNITS = {"", "十", "百", "千", "万"};

    public static String convertToChinese(int num) {
        StringBuilder sb = new StringBuilder();
        char[] nums = String.valueOf(num).toCharArray();
        int unitIndex = nums.length - 1;

        for (char c : nums) {
            int digit = c - '0';
            if (digit != 0) {
                sb.append(CN_NUMBERS[digit]);
                sb.append(UNITS[unitIndex]);
            } else {
                // 如果是0,且不是最后一位,则补一个零
                if (unitIndex != 0 && sb.charAt(sb.length() - 1) != '零') {
                    sb.append(CN_NUMBERS[digit]);
                }
            }
            unitIndex--;
        }

        return sb.toString();
    }

    public static void main(String[] args) {
        int num = 12345;
        String chineseNum = convertToChinese(num);
        System.out.println(chineseNum); // 打印结果为一万二千三百四十五
    }
}

示例应用

我们可以将这个方法应用在一些场景中,比如金额大写、数字转中文表示等。下面我们来看一个示例应用,将一段文字中的数字转成中文表示。

public class NumberToChineseDemo {

    public static void main(String[] args) {
        String text = "今天工作了8个小时,完成了任务。收到了200元的奖金。";
        String[] words = text.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");

        StringBuilder sb = new StringBuilder();
        for (String word : words) {
            if (word.matches("\\d+")) {
                sb.append(NumberToChinese.convertToChinese(Integer.parseInt(word)));
            } else {
                sb.append(word);
            }
        }

        System.out.println(sb.toString());
    }
}

结语

通过本文的介绍,我们学习了如何使用Java将数字转成中文表示。这在一些场景下非常有用,比如希望文字更加生动、易懂的情况下。希望本文对您有所帮助,谢谢阅读!

pie
    title 饼状图示例
    "一" : 25
    "二" : 25
    "三" : 25
    "四" : 25
阿拉伯数字 中文表示
12345 一万二千三百四十五
8
200 二百