Java 如何将1-1000转换成单词?

Java 如何将1-1000转换成单词?,java,cmd,bufferedreader,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.

当这项任务分配给我时,我已经想到了如何做,但我所想的“事情”是手动完成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*\
请帮帮我,我不想那样做!我只是一个noob程序员:(

从中获得并根据您的需要对其进行修改。这段代码的原始所有者将获得全部荣誉

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) {

    }
  }
}
导入java.text.DecimalFormat;
公共类英语数字词{
私有静态最终字符串[]tensNames={
"",
“十”,
“二十”,
“三十”,
“四十”,
“五十”,
“六十”,
“七十”,
“八十”,
“九十”
};
私有静态最终字符串[]numNames={
"",
“一个”,
“两个”,
“三”,
“四”,
“五个”,
“六”,
“七”,
“八”,
“九”,
“十”,
“十一”,
“十二”,
“十三”,
“十四”,
“十五”,
“十六”,
“十七”,
“十八”,
“十九”
};
private EnglishNumberToWords(){}
私有静态字符串convertlessthannethousand(整数){
弦索;
如果(数量%100<20){
soFar=numNames[数量%100];
数目/=100;
}
否则{
soFar=numNames[数量%10];
数目/=10;
soFar=tensNames[编号%10]+soFar;
数目/=10;
}
如果(数字==0),则返回soFar;
返回numNames[数字]+“百”+soFar;
}
公共静态字符串转换(长数字){
//0至999
如果(number==0){返回“零”;}
字符串snumber=Long.toString(数字);
//用“0”填充
字符串掩码=“000000000000”;
DecimalFormat df=新的DecimalFormat(掩码);
snumber=df.format(数字);
//xxxnnnnnnnnnnn
int十亿=整数.parseInt(snumber.substring(0,3));
//nnnxxnnnnnn
int数百万=Integer.parseInt(snumber.substring(3,6));
//nnnnnnXXXnnn
int hundredthoussands=Integer.parseInt(snumber.substring(6,9));
//nnnnnnxxx
int千=整数.parseInt(snumber.substring(9,12));
弦乐;
交换机(十亿){
案例0:
trad=”;
打破
案例1:
TRADBLIONALYST=可转换的酒店和酒店(十亿)
+“亿”;
打破
违约:
TRADBLIONALYST=可转换的酒店和酒店(十亿)
+“亿”;
}
字符串结果=trad;
百万美元;
交换机(百万){
案例0:
tradmillumns=“”;
打破
案例1:
TradMillowns=可转换的曼哈顿净房屋和(百万)
+“百万”;
打破
违约:
TradMillowns=可转换的曼哈顿净房屋和(百万)
+“百万”;
}
结果=结果+结果;
串成百上千;
交换机(百分之一百){
案例0:
TradHundthundsands=“”;
打破
案例1:
Traddredthoundsands=“一千”;
打破
违约:
TradHundthousands=无转炉炼钢厂(Hundthousands)
+“千”;
}
结果=结果+交易的百分之一百;
串千;
TRAD千零=可转换的Hanonethousand(千);
结果=结果+1000;
//删除额外的空间!
返回结果.replaceAll(“^\\s+”,”).replaceAll(“\\b\\s{2,}\\b”,”);
}
/**
*测试
*@param args
*/
公共静态void main(字符串[]args){
试一试{
扫描仪=新的扫描仪(System.in);
System.out.println(“输入编号”);
int i=scanner.nextInt();
System.out.println(“***”+英文数字转换(i));
}
捕获(例外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));
        }
    }


}
公共类转换器numbertowords{
最终私有静态字符串[]单位={“零”、“一”、“二”、“三”、“四”,
“五”、“六”、“七”、“八”、“九”、“十”,
“十一”、“十二”、“十三”、“十四”、“十五”,
“十六”、“十七”、“十八”、“十九”};
最后一个私有静态字符串[]十={“”,“二十”,“三十”,“四十”,“五十”,
“六十”、“七十”、“八十”、“九十”};
公共静态字符串转换(整数i){
如果(i<20)返回单位[i];
如果(i<100)返回十位[i/10]+((i%10>0)?“+转换(i%10):”;
如果(i<1000)返回单位[i/100]+“100”+((i%100>0)和“+转换(i%100):”);
如果(i<1000000)返回转换(i/1000)+“千”+((i%1000>0)?“+转换(i%1000):”);
返回转换(i/1000000)+“百万”+((i%1000000>0)?“+转换(i%1000000):”);
}
公共静态void main(字符串[]args){

对于(int i=1;i如果要针对每个读取的数字打印字符串,则必须使numberArray最多可计数1000个: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++;
  }
}

没有任何规则可以用来创建这样的字符串吗?请参见尝试先将数字分解为数字,然后您也可以这样做,只需根据它们的位置向它们添加
100
1000
,…就可以了。对于以00到20结尾的数字,没有一般的简单规则,但在20之后,它就变得非常简单了。试试d如果您想要更多建议,请将数字(千、百)合成并提交到此处。您忘记了提及。此外,如果源代码不在堆栈溢出之外,则不应将其作为您自己的答案重新发布,而应将此问题标记为重复。主要根据OP需要,使用:for(长i=1;i@Pshemo是的,sirEven完成了归因,但这并不能摆脱这样一个事实,即你基本上已经为他们完成了OP的家庭作业。我不能真的复制它,因为我会向全班解释……我不能复制我不理解的东西……谢谢你给我一些想法:)表达式的非法开始>静态私有最终字符串[]数字raray=新字符串[]为什么?在你的情况下,这是有效的!还是你需要的?不是如果所有1-1000都显示为单词,我需要的是一个程序的想法如果你输入一个数字,给出的数字将显示结果