2012-03-25 22 views
0

私はNSNumberFormatterを見ましたが、それはうまくいかないので、書かれた数字を解析して実際の数字に変換する方法がありますか?"1"を返し、 "1"を返すメソッドはありますか?

+1

数字は0から9までですか?または、22のような数字がありますか? – rooftop

+0

ちょうど0から9です。 –

+2

もしそれがちょうど0から9までで、ローカライズされていないのであれば、なぜNSDictionaryを文字列 - >数値で作成しないのですか? –

答えて

0

NSNumberFormatterあなたが道の一部を取得しますvia NSNumberFormatterSpellOutStyleNSNumberが行う基本的な書式設定は、それを終了します。

NSNumberFormatter * nf = [[NSNumberFormatter alloc] init]; 
[nf setNumberStyle:NSNumberFormatterSpellOutStyle]; 
NSString * numberWordString = @"three one two"; 
NSMutableString * digitString = [[NSMutableString alloc] init]; 
// Break up the input string at spaces and iterate over the result 
for(NSString * s in [numberWordString componentsSeparatedByString:@" "]){ 
    // Let the formatter turn each string into an NSNumber, then get 
    // the stringValue from that, which will be a digit. 
    [digitString appendString:[[nf numberFromString:s] stringValue]] ; 
}   
NSLog(@"%@", digitString); // prints "312" 

明らかに、あなたはnf、フォーマットに失敗した場合(これはクラッシュします小文字、不正な入力、異なる入力フォーマットを処理するにはいくつかの作業を配置する必要があります - それはへの不正な引数であるnilを返しますappendString:

1

このようなものは(とにかく正の整数のために)機能します。これはただの出発点である、あなたは言葉が正しかったことを確認し、多分それはより堅牢にするために大文字小文字を無視するようにチェックする必要があります:

[self parseNumberWords:@"five two three"]; 


-(NSInteger)parseNumberWords:(NSString *)input { 
NSArray *wordArray = [NSArray arrayWithObjects:@"zero",@"one",@"two",@"three",@"four",@"five",@"six",@"seven",@"eight",@"nine", nil]; 
NSArray *words = [input componentsSeparatedByString:@" "]; 
NSInteger num = 0; 
NSInteger j =0; 
for (NSInteger i = [words count]; i>0 ;i--) { 
    num = num + [wordArray indexOfObject:[words objectAtIndex:i-1]] * pow(10, j); 
    j = j+1; 
} 
NSLog(@"%ld",num); 
return num; 

}

関連する問題