2016-08-12 175 views
3

如何將非英文數字轉換爲英文數字如: 「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); 
} 

回答

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

對於雨燕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

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