先解释步骤:

1.将输入的数字,按3位划分
2.每3位数字进行判断输出,内部划分情况1位数,2位数和3位数的情况;
3.在美3位数字输出时,加上位数判断,如billion,million,thousand。

个人感觉较为麻烦的步骤是将输入数字划分为3位数:

1.如果输入的数字为1,100 123,111,如此带逗号的方式,则直接String.split即可;
2.如果输入的数字无逗号,则需要手动划分,此时灵活运用整形的除法和取模,可以快速得到结果;如果使用字符串substring,则比较难实现(具体可参考以下代码)

import java.util.*;

public class Main {
//准备数据
    static List<String> list1 = Arrays.asList("", "one", "two", "three", "four",
                                "five",
                                "six",
                                "seven", "eight", "nine", "ten",
                                "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "senventeen",
                                "eighteen", "nineteen", "twenty",
                                "thirty",
                                "forty",
                                "fifty",
                                "sixty",
                                "seventy",
                                "eighty",
                                "ninety");
    static List<String> list2 = Arrays.asList( "", "thousand", "million",
                                "billion");

    public static void main(String[] args)  {
        Scanner scan = new Scanner(System.in);
//         String input = scan.nextLine();
//         StringBuilder sb = new StringBuilder(input).reverse();
//         int count = 0;
//         for (int i = 0; i < sb.length(); i++) {
//             if (Character.isDigit(sb.charAt(i))) {
//                 count++;
//             } else {
//                 continue;
//             }
//             if (count % 3 == 0 && i<sb.length()-1) sb.insert(i + 1, ',');
//         }
//         String[] inputs = sb.reverse().toString().split("\\,");
        //以上划分3位数的方法过于麻烦
        long input = scan.nextLong();
        List<String> list = new ArrayList<>();
        if (input / 1000000 > 0) list.add(String.valueOf(input / 1000000));
        if (input / 1000 > 0) list.add(String.valueOf(input % 1000000 / 1000));
        list.add(String.valueOf(input % 1000));
        String[] inputs = list.toArray(new String[list.size()]);



        //每三位进行输出,注意0的存在
        for (int i = 0; i < inputs.length; i++) {
            String discription = list2.get((inputs.length - i - 1));
            System.out.print(output(inputs[i]) + " " + discription + " ");
        }

    }

    //每三位进行判断输出,最终结果只需加list2中的后缀
    public static String output(String input) {
        //按位数进行输出判断
        if (input.length() == 1) {
            return list1.get(Integer.parseInt(input));
        } else if (input.length() == 2) {
            //前方不可能有0
            int num = Integer.parseInt(input);
            if (num < 21) {
                return list1.get(num);
            } else if (num % 10 != 0) {
                return list1.get(18 + num / 10) + " " + list1.get(num % 10);
            } else {
                return list1.get(18 + num / 10) + list1.get(num % 10);
            }
        } else if (input.length() == 3) {
            //判断前方以0开头,若以0开头,则去0
            if (input.matches("^0[0-9]+")) {
                input = input.replaceAll("^0+", "");
                return output(input);
            } else {
                //若为三位数
                int num = Integer.parseInt(input);
                if (num % 100 != 0) {
                    return list1.get(num / 100) + " hundred and " + output(String.valueOf(
                                num % 100));
                } else {
                    return list1.get(num / 100) + " hundred";
                }
            }
        }
        return "-1";
    }
}