2016-08-12 2 views
3

Как перевести не английский номер на английский номер как: "3486912881" в "3486912881" в Swift или я хочу принять только английские номера и получить другие.convert arabic String to english number in Swift

в Java Android этот код работает для меня:

private static String arabicToDecimal(String number) { 
    char[] chars = new char[number.length()]; 
    for(int i=0;i<number.length();i++) { 
     char ch = number.charAt(i); 
     if (ch >= 0x0660 && ch <= 0x0669) 
      ch -= 0x0660 - '0'; 
     else if (ch >= 0x06f0 && ch <= 0x06F9) 
      ch -= 0x06f0 - '0'; 
     chars[i] = ch; 
    } 
    return new String(chars); 
} 

ответ

7

сделать как

let NumberStr: String = "٣٤٨٦٩١٢٨٨١" 
    let Formatter: NSNumberFormatter = NSNumberFormatter() 
    Formatter.locale = NSLocale(localeIdentifier: "EN") 
    let final = Formatter.numberFromString(NumberStr) 
    if final != 0 { 
     print("\(final!)") 
    } 

выход

enter image description here

+3

Вместо проверки 'final! = 0' вы можете просто использовать необязательную привязку; 'if let final = Formatter.numberFromString (NumberStr) {print (final)}'. Кроме того, имена переменных, такие как 'NumberStr' и' Formatter' выше, должны (по соглашению) быть названы с начальной маленькой буквой как 'camelCase', а не как' CamelCase' (которая зарезервирована, например, _types_). – dfri

+0

Спасибо, что так много брата. –

1

Для Swift 3.0 Или вверх:

let numberFormatter = NumberFormatter() 
    numberFormatter.locale = Locale(identifier: "EN") 
    if let finalText = numberFormatter.number(from: "text here") 
    { 
     print("Final text is: ", finalText) 
    } 
0

Для использования выше кодов в качестве функции попробуйте следующее:

func toEnglishNumber(number: String) -> NSNumber { 

     var result:NSNumber = 0 

    let numberFormatter = NumberFormatter() 
    numberFormatter.locale = Locale(identifier: "EN") 
    if let finalText = numberFormatter.number(from: number) 
    { 
     print("Intial text is: ", number) 
     print("Final text is: ", finalText) 


     result = finalText 

    } 


    return result 
} 

Для использования функции:

print(toEnglishNumber(number: "١٢")) 
+0

этот код здесь имеет проблему, когда первый номер равен 0. Но приведенный выше код заменит числа на английский, а не конвертирует их. Но единственная проблема заключается в том, как использовать это. –

2

Проблема с использованием NumberFormatter является то, что он будет игнорировать другие не числовые символы, например, если у вас есть Hello ١٢٣, это будет 123. Чтобы сохранить другие символы и только конвертировать числовые, вы можете использовать следующее:

public extension String { 

public var replacedArabicDigitsWithEnglish: String { 
    var str = self 
    let map = ["٠": "0", 
       "١": "1", 
       "٢": "2", 
       "٣": "3", 
       "٤": "4", 
       "٥": "5", 
       "٦": "6", 
       "٧": "7", 
       "٨": "8", 
       "٩": "9"] 
    map.forEach { str = str.replacingOccurrences(of: $0, with: $1) } 
    return str 
} 
} 

/// usage 

"Hello ١٢٣٤٥٦٧٨٩١٠".replacedArabicDigitsWithEnglish // "Hello 12345678910" 
+0

Я использовал ваши коды. Но я получил это предупреждение. Выражение типа 'String' не используется –