2014-01-15 31 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