在Swift中将阿拉伯字符串转换为英文数字

问题描述:

如何将非英文数字转换为英文数字如: “3486912881”至Swift中的“3486912881” 或者我想接受英文数字并获取其他人。在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); 
} 

不喜欢

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

非常感谢你。 –

对于雨燕3.0或更高:

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

要使用上面的代码作为函数试试这个:

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但上述代码将取代数字,以英文不转换他们但唯一的问题是如何使用该 –

使用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

我用你的代码但我收到此警告 类型'字符串'未使用 –