2014-09-03 74 views
0

当这个被分配给我,我已经对如何做到这一点的心事,但“东西”,我当时的想法是,以做手工1-1000像这样:如何将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*\ 

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

+0

没有任何规则可以创建这样的字符串吗? – Pshemo 2014-09-03 14:06:38

+2

请参阅http://stackoverflow.com/questions/3911966/how-to-convert-number-to-words-in-java – Benjamin 2014-09-03 14:07:10

+0

http://stackoverflow.com/questions/3911966/how-to-convert-number- to-words-in-java – 2014-09-03 14:07:33

回答

0

根据自己的需要从here得到它,修改了它幸得充分验证码的原主人

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)); 
     } 
    } 


} 
+4

你忘了提及[作者和来源](http://stackoverflow.com/a/3911987/1393766)。此外,如果源不在Stack Overflow之外,那么不要将其重新发布为自己的答案,而应将此问题标记为重复。 – Pshemo 2014-09-03 14:09:49

+0

主要根据OP想要的,使用:for(long i = 1; i <= 1000; i ++){EnglishNumberToWords.convert(i);} – user3487063 2014-09-03 14:11:28

+0

@Pshemo yeah完成sir – 2014-09-03 14:11:30

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++; 
    } 
} 
+1

非法开始表达式 > static private final String [] numberArray = new String [] 为什么? – 2014-09-04 13:44:27

+0

这是有效的,在你的情况!或你需要什么? – user3819810 2014-09-04 13:46:26

+0

若1-1000全部显示为单词,则不需要,如果输入一个数字,我需要的是一个程序的想法,给出的数字将显示一个数字的结果或将它拼出来。 – 2014-09-04 14:06:55