Java实现输出整数各个位数的值

代码

/**
 * @author ObitoSnn
 */
public class Util {

    /**
     * 输出整数各个位数的值,例如:1234,输出 千位数 = 1,百位数 = 2,十位数 = 3,个位数 = 4
     *
     * @param num 要输出的整数
     */
    public static void print(int num) {
        print(num, String.valueOf(num).length(), getDigits(num));
    }

    private static Digit[] getDigits(int num) {
        Digit[] values = Digit.values();
        int length = String.valueOf(num).length();
        if (values.length < length) {
            throw new RuntimeException("第" + length + "位数[" + String.valueOf(num).charAt(0) + "]没有对应的枚举值" + ",请添加相应位数的枚举值");
        }
        int index = 0;
        for (int i = 0; i < values.length; i++) {
            if (values[i].count == length) {
                index = i;
                break;
            }
        }
        Digit[] result = new Digit[length];
        int pos = 0;
        for (int i = index; i < values.length; i++) {
            result[pos++] = values[i];
        }
        return result;
    }

    private static void print(int num, int digitsCount, Digit[] digits) {
        if (digitsCount != digits.length) {
            System.out.println("枚举值不匹配!!!");
            return;
        }
        int digitIndex = 0;
        for (int i = 0; i < digitsCount; i++) {
            Digit digit = digits[digitIndex++];
            if (digitsCount == 1) {
                // num为一位数时
                System.out.println("" + digit + (num / 1));
                return;
            }
            int zeroCount = digitsCount - 1;
            if (i == 0) {
                // 第一位,例如:1234,输出1
                System.out.println("" + digit + (num / Integer.parseInt("1" + getZeroByCount(zeroCount))));
            } else if (i == digitsCount - 1) {
                // 个位,例如:1234,输出4
                System.out.println("" + digit + (num % 10));
            } else {
                // 其它位,例如:1234,输出2和3
                int sZeroCount = zeroCount - i;
                int fZeroCount = sZeroCount + 1;
                System.out.println("" + digit + (num % Integer.parseInt("1" + getZeroByCount(fZeroCount)) / Integer.parseInt("1" + getZeroByCount(sZeroCount))));
            }
        }
        /*
            上面这个for循环,根据以下代码理解
            int num = 1234;
            System.out.println("千位数 = " + (num / 1000));
            System.out.println("百位数 = " + (num % 1000 / 100));
            System.out.println("十位数 = " + (num % 100 / 10));
            System.out.println("个位数 = " + (num % 10));
         */
    }

    private static String getZeroByCount(int zeroCount) {
        StringBuilder sb = new StringBuilder(zeroCount);
        for (int i = 0; i < zeroCount; i++) {
            sb.append("0");
        }
        return sb.toString();
    }

    /**
     * 位数枚举类
     * 必须以从大到小的顺序声明枚举值,否则结果会出错
     */
    private enum Digit {
        /**
         * 百万位
         */
        MILLION_DIGIT("百万位", 7),
        /**
         * 十万位
         */
        ONE_HUNDRED_THOUSAND_DIGIT("十万位", 6),
        /**
         * 万位
         */
        TEN_THOUSAND_DIGIT("万位数", 5),
        /**
         * 千位
         */
        THOUSAND("千位数", 4),
        /**
         * 百位
         */
        HUNDRED("百位数", 3),
        /**
         * 十位
         */
        TEN_DIGIT("十位数", 2),
        /**
         * 个位
         */
        DIGIT("个位数", 1);
        /**
         * 字段描述
         */
        private final String desc;
        /**
         * 对应第几位数,例如:个位数 ---> 1,十位数 ---> 2,百位数 ---> 3,以此类推,该字段写错会导致最终输出结果异常
         */
        private final int count;

        private Digit(String desc, int count) {
            this.desc = desc;
            this.count = count;
        }

        @Override
        public String toString() {
            return desc + " = ";
        }
    }

}

运行结果

public class MyApp {
    public static void main(String[] args) {
        Util.print(12345);
    }
}


版权声明:本文为weixin_48206895原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。