2014-09-03 73 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