如何将1 - 1000转换为单词?

时间:2014-09-03 14:04:52

标签: java cmd bufferedreader

当这个被分配给我时,我已经有了一些关于如何做的事情,但我想的那件事就是手动1-1000这样做:

import.java.io.*
    public static void main(String[] args) throws IOException
    {
       BufferedReader in=new BufferedReader(new InputStreamReader(System.in));

       int num;

         System.out.println("Enter Numbers to convert: ");
         num=Integer.parseInt(in.readLine());

         if (num==1)
         {
             System.out.println("one");
         }     
         else if(num==2)
         {
             System.out.println("two");
         }
         else if(num==3)
         {
             System.out.println("three");
         }
  \*and so on up to 1000*\

请帮助我不想那样做!我只是一个菜鸟程序员:(

2 个答案:

答案 0 :(得分:0)

here获取并根据您的需要进行修改。 Credit完全归功于此代码的原始所有者。

import java.text.DecimalFormat;

public class EnglishNumberToWords {

  private static final String[] tensNames = {
    "",
    " ten",
    " twenty",
    " thirty",
    " forty",
    " fifty",
    " sixty",
    " seventy",
    " eighty",
    " ninety"
  };

  private static final String[] numNames = {
    "",
    " one",
    " two",
    " three",
    " four",
    " five",
    " six",
    " seven",
    " eight",
    " nine",
    " ten",
    " eleven",
    " twelve",
    " thirteen",
    " fourteen",
    " fifteen",
    " sixteen",
    " seventeen",
    " eighteen",
    " nineteen"
  };

  private EnglishNumberToWords() {}

  private static String convertLessThanOneThousand(int number) {
    String soFar;

    if (number % 100 < 20){
      soFar = numNames[number % 100];
      number /= 100;
    }
    else {
      soFar = numNames[number % 10];
      number /= 10;

      soFar = tensNames[number % 10] + soFar;
      number /= 10;
    }
    if (number == 0) return soFar;
    return numNames[number] + " hundred" + soFar;
  }


  public static String convert(long number) {
    // 0 to 999 999 999 999
    if (number == 0) { return "zero"; }

    String snumber = Long.toString(number);

    // pad with "0"
    String mask = "000000000000";
    DecimalFormat df = new DecimalFormat(mask);
    snumber = df.format(number);

    // XXXnnnnnnnnn
    int billions = Integer.parseInt(snumber.substring(0,3));
    // nnnXXXnnnnnn
    int millions  = Integer.parseInt(snumber.substring(3,6));
    // nnnnnnXXXnnn
    int hundredThousands = Integer.parseInt(snumber.substring(6,9));
    // nnnnnnnnnXXX
    int thousands = Integer.parseInt(snumber.substring(9,12));

    String tradBillions;
    switch (billions) {
    case 0:
      tradBillions = "";
      break;
    case 1 :
      tradBillions = convertLessThanOneThousand(billions)
      + " billion ";
      break;
    default :
      tradBillions = convertLessThanOneThousand(billions)
      + " billion ";
    }
    String result =  tradBillions;

    String tradMillions;
    switch (millions) {
    case 0:
      tradMillions = "";
      break;
    case 1 :
      tradMillions = convertLessThanOneThousand(millions)
         + " million ";
      break;
    default :
      tradMillions = convertLessThanOneThousand(millions)
         + " million ";
    }
    result =  result + tradMillions;

    String tradHundredThousands;
    switch (hundredThousands) {
    case 0:
      tradHundredThousands = "";
      break;
    case 1 :
      tradHundredThousands = "one thousand ";
      break;
    default :
      tradHundredThousands = convertLessThanOneThousand(hundredThousands)
         + " thousand ";
    }
    result =  result + tradHundredThousands;

    String tradThousand;
    tradThousand = convertLessThanOneThousand(thousands);
    result =  result + tradThousand;

    // remove extra spaces!
    return result.replaceAll("^\\s+", "").replaceAll("\\b\\s{2,}\\b", " ");
  }

  /**
   * testing
   * @param args
   */
  public static void main(String[] args)  {

    try {
      Scanner scanner = new Scanner(System.in);
      System.out.println("Enter the number");
      int i = scanner.nextInt();
      System.out.println("*** " + EnglishNumberToWords.convert(i));
    }
    catch(Exception e) {

    }
  }
}

更简单的一个:

public class ConvertNumberToWords {

    final private  static String[] units = {"Zero","One","Two","Three","Four",
        "Five","Six","Seven","Eight","Nine","Ten",
        "Eleven","Twelve","Thirteen","Fourteen","Fifteen",
        "Sixteen","Seventeen","Eighteen","Nineteen"};
    final private static String[] tens = {"","","Twenty","Thirty","Forty","Fifty",
        "Sixty","Seventy","Eighty","Ninety"};


    public static String convert(Integer i) {
        if( i < 20)  return units[i];
        if( i < 100) return tens[i/10] + ((i % 10 > 0)? " " + convert(i % 10):"");
        if( i < 1000) return units[i/100] + " Hundred" + ((i % 100 > 0)?" and " + convert(i % 100):"");
        if( i < 1000000) return convert(i / 1000) + " Thousand " + ((i % 1000 > 0)? " " + convert(i % 1000):"") ;
        return convert(i / 1000000) + " Million " + ((i % 1000000 > 0)? " " + convert(i % 1000000):"") ;
    }
    public static void main(String[]args){
        for(int i=1;i<1000;i++){
            System.out.println(i+" \t "+convert(i));
        }
    }


}

答案 1 :(得分:0)

如果你想针对每个读取数字打印字符串,你必须使numberArray达到千计数:P

 public static void main(String[] args) throws IOException
 {   

        public static final String[] numberArray = new String[] {
        "one", "two", "three", "four", "five", "six", "seven", "eight", "nine",
        "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen",     "eighteen", "nineteen"
        };


  BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
  String number = in.readLine();

  int num = 0;

  while(num!=1000){
    if (num == Integer.parseInt(number)) {
      System.out.println(numberArray[num]);
    }
    num++;
  }
}