在将单词转换为数字时使用StringTokenizer

时间:2014-01-15 18:46:34

标签: java stringtokenizer

有人可以帮我解决如何使用字符串标记器在Java编程中将单词转换为数字的方法。您的回答将受到高度赞赏。

已编辑: 我已经制作了这段代码。但是有一个错误。就像我输入一千一百,程序输出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));
            }
    }``
}

3 个答案:

答案 0 :(得分:1)

我认为stringtokenizer是不够的,你需要一本字典从你的语言转换为数字

另见 http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/ie/NumberNormalizer.html

提供将单词转换为数字的函数与QuantifiableEntityNormalizer不同,它将各种类型的可量化实体(如money和date)规范化,NumberNormalizer仅规范化数值表达式(例如,一个=> 1,200 => 200.0)

答案 1 :(得分: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());

答案 2 :(得分:0)

你需要编写一个逻辑来比较字符串和标准字,然后在旅途中建立数字。

只是观察:StackOverflow不是解决你的作业的地方。