如何将字符串中的英文数字转换为Objective-C中的波斯语/阿拉伯数字?

Sob*_*han 5 objective-c arabic persian

我有一个英文字符串,可能有也可能没有数字.但我希望这些数字作为波斯数字在屏幕上打印出来.

例如,如果 NSString *foo = @"a string with numbers 1 2 3;"

那么输出应该是 a string with numbers ???

我现在使用的代码是:

-(NSString *)convertEnNumberToFarsi:(NSString *) number{
    NSString *text;
    NSDecimalNumber *someNumber = [NSDecimalNumber decimalNumberWithString:number];
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    NSLocale *gbLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"fa"];
   [formatter setLocale:gbLocale];
   text = [formatter stringFromNumber:someNumber];
   return text;
}
Run Code Online (Sandbox Code Playgroud)

此方法仅转换仅包含数字的字符串,但如上所述,我想转换任何可能包含或不包含数字的字符串.

我怎样才能实现这一目标?

Gra*_*lex 8

简单的方法:

NSDictionary *numbersDictionary = @{@"1" : @"?", @"2" : @"?", @"3" : @"?", @"4" : @"?", @"5" : @"?", @"6" : @"?", @"7" : @"?", @"8" : @"?", @"9" : @"?"};
for (NSString *key in numbersDictionary) {
  str = [str stringByReplacingOccurrencesOfString:key withString:numbersDictionary[key]];
}
Run Code Online (Sandbox Code Playgroud)

其他解决方案更灵活的语言环境:

NSNumberFormatter *formatter = [NSNumberFormatter new];
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"ar"];
for (NSInteger i = 0; i < 10; i++) {
  NSNumber *num = @(i);
  str = [str stringByReplacingOccurrencesOfString:num.stringValue withString:[formatter stringFromNumber:num]];
}
Run Code Online (Sandbox Code Playgroud)

注意:此代码在没有IDE的情况下编写,可能会出现语法错误.


Vah*_*hid 8

在快速3:

func convertEngNumToPersianNum(num: String)->String{
    let number = NSNumber(value: Int(num)!)
    let format = NumberFormatter()
    format.locale = Locale(identifier: "fa_IR")
    let faNumber = format.string(from: number)

    return faNumber!
}
Run Code Online (Sandbox Code Playgroud)

强行打开前检查以防止碰撞.


Mil*_*nia 5

斯威夫特 3:

但是其他答案是正确的,转换StringInt.

将 a 转换StringInt删除左零,这是不好的(特别是在转换手机和国民 ID 时)。为了避免这个问题,我更喜欢将每个英语数字替换为波斯语。

static func convertToPersian(text : String)-> String {
    let numbersDictionary : Dictionary = ["0" : "?","1" : "?", "2" : "?", "3" : "?", "4" : "?", "5" : "?", "6" : "?", "7" : "?", "8" : "?", "9" : "?"]
    var str : String = text

    for (key,value) in numbersDictionary {
        str =  str.replacingOccurrences(of: key, with: value)
    }

    return str
}
Run Code Online (Sandbox Code Playgroud)

此方法还可用于替换文本中的数字,无需将纯数字转换为波斯语。