How to convert english numbers inside a string to Persian/Arabic numbers in Objective-C?

前端 未结 10 1980
轮回少年
轮回少年 2021-01-18 10:53

I have an english string that may or may not have numbers. But i want those numbers to be printed on screen as Persian numbers.

For example if NSString *foo =

相关标签:
10条回答
  • 2021-01-18 11:28

    In swift 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!
    }
    

    Check before force unwrap to prevent crash.

    0 讨论(0)
  • 2021-01-18 11:29

    convert number to any locale

    let formatter = NumberFormatter()
    formatter.locale = Locale(identifier: "ar")
    if let localized = formatter.string(from: NSNumber(value: comp.0)) {
       return "\(localized)"
    }
    

    example:

    (lldb) po formatter.string(from: NSNumber(value: 0)) ▿ Optional - some : "٠"

    (lldb) po formatter.string(from: NSNumber(value: 1)) ▿ Optional - some : "١"

    (lldb) po formatter.string(from: NSNumber(value: 2)) ▿ Optional - some : "٢"

    (lldb) po formatter.string(from: NSNumber(value: 3)) ▿ Optional - some : "٣"

    (lldb) po formatter.string(from: NSNumber(value: 4)) ▿ Optional - some : "٤"

    (lldb) po formatter.string(from: NSNumber(value: 5)) ▿ Optional - some : "٥"

    (lldb) po formatter.string(from: NSNumber(value: 6)) ▿ Optional - some : "٦"

    (lldb) po formatter.string(from: NSNumber(value: 7)) ▿ Optional - some : "٧"

    (lldb) po formatter.string(from: NSNumber(value: 8)) ▿ Optional - some : "٨"

    (lldb) po formatter.string(from: NSNumber(value: 9)) ▿ Optional - some : "٩"

    (lldb) po formatter.string(from: NSNumber(value: 10)) ▿ Optional - some : "١٠"

    0 讨论(0)
  • 2021-01-18 11:31

    The simple way:

    NSDictionary *numbersDictionary = @{@"1" : @"۱", @"2" : @"۲", @"3" : @"۳", @"4" : @"۴", @"5" : @"۵", @"6" : @"۶", @"7" : @"۷", @"8" : @"۸", @"9" : @"۹"};
    for (NSString *key in numbersDictionary) {
      str = [str stringByReplacingOccurrencesOfString:key withString:numbersDictionary[key]];
    }
    

    Other solution more flexible with locale:

    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]];
    }
    

    Note: this code wrote without IDE, it can be with syntax errors.

    0 讨论(0)
  • 2021-01-18 11:33

    Swift 3:

    However other answers are correct, there is a little problem in converting String to Int.

    Converting a String to Int removes left zeros which is not good (Specially in converting cell phones and national Ids). To avoid this problem I prefer replacing each English number to Persian.

    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
    }
    

    This method can also be used to replace numbers within text and its not necessary to have a pure number to convert to Persian.

    0 讨论(0)
  • 2021-01-18 11:34
    +(NSString *)convertNumToPersian:(NSString *)EnglishNumString
    {
        if ( [EnglishNumString isEqual:[NSNull null]] )
            return @"";
    
        NSString *myString = [EnglishNumString stringByReplacingOccurrencesOfString:@"1" withString:@"۱"];
        myString = [myString stringByReplacingOccurrencesOfString:@"2" withString:@"۲"];
        myString =[myString stringByReplacingOccurrencesOfString:@"3" withString:@"۳"];
        myString =[myString stringByReplacingOccurrencesOfString:@"4" withString:@"۴"];
        myString =[myString stringByReplacingOccurrencesOfString:@"5" withString:@"۵"];
        myString =[myString stringByReplacingOccurrencesOfString:@"6" withString:@"۶"];
        myString =[myString stringByReplacingOccurrencesOfString:@"7" withString:@"۷"];
        myString =[myString stringByReplacingOccurrencesOfString:@"8" withString:@"۸"];
        myString =[myString stringByReplacingOccurrencesOfString:@"9" withString:@"۹"];
        myString =[myString stringByReplacingOccurrencesOfString:@"0" withString:@"۰"];
        return myString;
    }
    
    0 讨论(0)
  • 2021-01-18 11:39

    /** * In this function convert Arabic number to English number. * @sample stringValue : Pass String value. */

    fun numberArabicToEnglish(stringValue: String): String {
        val value = stringValue
            .replace("١", "1")
            .replace("٢", "2")
            .replace("٣", "3")
            .replace("٤", "4")
            .replace("٥", "5")
            .replace("٦", "6")
            .replace("٧", "7")
            .replace("٨", "8")
            .replace("٩", "9")
            .replace("٠", "0")
        return value
    }`enter code here`
    
    0 讨论(0)
提交回复
热议问题