在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);
}
答
对于雨燕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
我用你的代码但我收到此警告 类型'字符串'未使用 –
而不是'final!= 0'检查,您可以简单地使用可选绑定; 'if let final = Formatter.numberFromString(NumberStr){print(final)}'。另外,上面的'NumberStr'和'Formatter'这样的变量名应该(按照惯例)以最初的小写字母命名为camelCase而不是CamelCase(它保留给例如_types_)。 – dfri
非常感谢你。 –