2014-01-15 37 views
2

任何人都可以請幫我如何的話轉換成數字在Java編程,使用字符串標記。您的答覆將受到高度讚賞。在Coverting詞使用的StringTokenizer數點

編輯: 我已經作出這個代碼。但有一個錯誤。比如當我輸入一千一百時,程序輸出100100。需要你的幫助。你認爲我的計劃存在什麼問題,我該怎麼做。非常感謝..

import javax.swing.*; 
     import java.util.*; 
     import java.text.*; 
     public class convertwordstonumbers { 
     public static void main(String[] args) { 

     String sInput; 
     sInput=JOptionPane.showInputDialog("Enter a word/s:"); 
     StringTokenizer sToken= new StringTokenizer(sInput); 
     int Tokens=sToken.countTokens(); 
     String Words[]=new String[Tokens]; 
     double Numbers[]=new double[Tokens]; 
     double Multiplier[]=new double[Tokens]; 
     String Place[]=new String[Tokens]; 
     int a=0; 
     while(sToken.hasMoreTokens()) 
     { 
     Words[a]=sToken.nextToken(); 
     a++; 
     } 
     String sUnits[]={"zero","one","two","three","four","five","six","seven","eight","nine"}; 
     String sTeens[]= {"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"}; 
     String sTys[]={"twenty","thirty","fourty","fifty","sixty","seventy","eighty","ninety"}; 
     String sIons[]={"hundred","thousand","million","billion"}; 
     String sThs[]={"tenths","hundredths"}; 
     double iUnits[]={0,1,2,3,4,5,6,7,8,9}; 
     double iTeens[]={10,11,12,13,14,15,16,17,18,19}; 
     double iTys[]={20,30,40,50,60,70,80,90}; 
     double iIons[]={100,1000,1000000,1000000000}; 
     double iDecs[]={0.1,0.01}; 
     double iSum=0; 
     for(int b=0;b<Tokens;b++){ 
     for(int c=0;c<10;c++){ 
      if(Words[b].compareToIgnoreCase(sUnits[c])==0){ 
       Numbers[b]=iUnits[c]; 
       Place[b]="a"; 
      } 
     } 
     for(int c=0;c<10;c++){ 
      if(Words[b].compareToIgnoreCase(sTeens[c])==0){ 
       Numbers[b]=iTeens[c]; 
       Place[b]="a"; 
      } 
     } 
     for(int c=0;c<8;c++){ 
      if(Words[b].compareToIgnoreCase(sTys[c])==0){ 
       Numbers[b]=iTys[c]; 
       Place[b]="a"; 
      } 
     } 
     for(int c=0;c<4;c++){ 
      if(Words[b].compareToIgnoreCase(sIons[c])==0){ 
       Numbers[b]=iIons[c]; 
       Place[b]="b"; 
       Multiplier[b]=iIons[c]; 
      } 
     } 
     for(int c=0;c<2;c++){ 
      if(Words[b].compareToIgnoreCase(sThs[c])==0){ 
       Numbers[b]=iDecs[c]; 
       Place[b]="b"; 
      } 
     } 
    } 
     for(int d=0;d<Tokens;d++){ 
     if(Place[d]==null){ 
      JOptionPane.showMessageDialog(null, "Invalid input"); 
      System.exit(0); 
     } 
     if(Place[d]=="a") 
      iSum+=Numbers[d]; 
     if(Place[d]=="b") 
      iSum*=Numbers[d]; 
    } 
    if (iSum<1000) 
    {DecimalFormat dFormat= new DecimalFormat("0.00"); 
    System.out.println(dFormat.format(iSum));} 
     else 
     {DecimalFormat dFormat= new DecimalFormat("0,000.00"); 
     System.out.println(dFormat.format(iSum)); 
      } 
    }`` 
} 
+1

這是一個功課題嗎? – Chris

回答

1

我想的StringTokenizer是不夠的,你需要一本字典,從你的語言transalate數點

也看到 http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/ie/NumberNormalizer.html

提供功能的話轉換成數字與QuantifiableEntityNormalizer該歸一化的各種類型如金錢和日期可量化的實體,只NumberNormalizer標準化數字表達式(例如,一個=> 1,200 => 200.0)

+0

我編輯我的問題先生感謝您的答案。它真的幫助我。非常感謝.. – user3198591

0

你需要寫一個邏輯的字符串與標準字進行比較,然後建立在旅途中的數量。

只是一個觀察:StackOverflow的是不要讓你的任務解決的地方。

+0

我編輯我的問題先生感謝您的答案。它真的幫助我。非常感謝.. – user3198591

1

StringTokenizer有一個允許特定分隔符的構造函數。假設你希望用一個簡單的空格來劃分每個標記「」,你可以使用一個ArrayList,每個標記預先使用數字0-9來預先放置。

ArrayList<String> token; 

token.add("zero"); 
token.add("one"); ... etc 

StringTokenizer s = new StringTokenizer("four zero four", " "); 
String num_rep = token.indexOf(s.nextToken()) + token.indexOf(s.nextToken()) + token.indexOf(s.nextToken()); 
+0

我編輯我的問題先生感謝您的答案。它真的幫助我。非常感謝.. – user3198591

+0

非常歡迎您:)。 – 2014-01-16 17:57:33