2016-08-12 7 views
3

So konvertieren Sie nicht englische Nummer in englische Nummer wie: "3486912881" zu "3486912881" in Swift oder ich möchte nur englische Nummern akzeptieren und andere erhalten.Konvertieren Sie arabische Zeichenfolge in englische Nummer in Swift

in Java Android dieser Code ist für mich arbeiten:

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

Antwort

7

wie

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

Ausgang

enter image description here

+3

Anstelle der Prüfung "final! = 0" können Sie einfach die optionale Bindung verwenden; 'If ​​final = Formatter.numberFromString (NumberStr) {print (final)}'. Außerdem sollten Variablennamen wie "NumberStr" und "Formatter" oben (mit Konvention) mit einem Anfangskleinbuchstaben als "camelCase" benannt werden, nicht als "CamelCase" (das beispielsweise für _types reserviert ist). – dfri

+0

Vielen Dank, Bruder. –

1

für Swift 3.0 oder bis:

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

Um oben Codes zu verwenden als Funktion versuchen Sie dies:

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 
} 

die Funktion nutzen zu können:

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

dieser Code hier hat ein Problem, wenn die erste Zahl 0 ist Aber der obige Code wird die Zahlen ersetzen, um Englisch sie nicht zu konvertieren Aber das einzige Problem ist, wie man das verwendet –

2

Das Problem mit NumberFormatter ist, dass es nicht andere ignorieren numerische Zeichen, zum Beispiel, wenn Sie Hello ١٢٣ haben, wird es 123 sein. Um andere Zeichen zu behalten und nur numerische zu konvertieren, können Sie Folgendes verwenden:

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

Ich habe Ihre Codes verwendet Aber ich erhielt diese Warnung Ausdruck des Typs 'String' ist ungenutzt –

Verwandte Themen