当前位置: 首页 > 知识库问答 >
问题:

从任何语言转换数字字符串,同时保留前导零

萧宏远
2023-03-14

我有一个阿拉伯语的数字串,我想把它转换成英语,我用这个:

let arabicPhoneNumber = "٠١٠١٢٣٤٥٦٧٨٩"
let formatter = NumberFormatter()
formatter.locale = Locale(identifier: "EN")
if let number = formatter.number(from: arabicPhoneNumber)?.stringValue {
    print(number) //deletes leading zero
}

问题是它删除了前导零,我想保留它,因为这是一个电话号码。

共有2个答案

乌靖
2023-03-14

swift 4.0

 func convertToEnDigits(_ digits: String) -> String {
    // We need a CFMutableString and a CFRange:
    let cfstr = NSMutableString(string: digits) as CFMutableString
    var range = CFRange(location: 0, length: CFStringGetLength(cfstr))
    // Do the transliteration (this mutates `cfstr`):
    CFStringTransform(cfstr, &range, kCFStringTransformToLatin, false)
    // Convert result back to a Swift string:
    return (cfstr as String)
}
百里诚
2023-03-14

不是将字符串转换为数字,而是可以从基础库中使用“<代码> CFSTRIN转换”(< /代码>)对拉丁脚本进行“音译”:

let arabicPhoneNumber = "٠١٠١٢٣٤٥٦٧٨٩"

// We need a CFMutableString and a CFRange:
let cfstr = NSMutableString(string: arabicPhoneNumber) as CFMutableString
var range = CFRange(location: 0, length: CFStringGetLength(cfstr))

// Do the transliteration (this mutates `cfstr`):
CFStringTransform(cfstr, &range, kCFStringTransformToLatin, false)

// Convert result back to a Swift string:
let phoneNumber = cfstr as String

print(phoneNumber) // 010123456789

这将保留所有数字以及可能的分隔符。

备注:上述示例(来自问题)包含“阿拉伯-印度”数字,例如١=U 0661=“阿拉伯-印度数字一”。这些在macOS 10.12和iOS 10上的翻译是正确的。

在早期的OS版本上,

CFStringTransform(cfstr, &range, kCFStringTransformLatinArabic, true)
CFStringTransform(cfstr, &range, kCFStringTransformStripCombiningMarks, false)

在我的测试中正确地将阿拉伯语数字转换为拉丁语。

 类似资料:
  • 我还没有找到一个能解决PHP中整数到字符串转换这一方面的问题,所以 我有一个文件,其中一个字段包含一些长度为3、4或5位的数字,我需要将所有数字标准化为4位 如果数字是123、1234、12345,那么为了标准化,我在第一个数字后面加了一个零,第二个数字不加任何处理,第三个数字四舍五入:到目前为止还不错。问题在于,该文件包含一些具有有效前导零023、0234、02346的数字 我需要保留前导零,我

  • 本文向大家介绍Swift语言反转字符串,包括了Swift语言反转字符串的使用技巧和注意事项,需要的朋友参考一下 示例 2.2 3.0

  • 我有一根绳子, 我想把它转换成一个字节数组。 有人能在这方面引导我吗?我尝试了以下代码,但我得到了ASCII中的数据。我不想那样。

  • 我遇到了这样一个java字符串,其中以下内容是错误的: 我想这是因为字符串构造函数默认将主体字节[]的编码视为UTF-8,我不是100%确定。我如何能够将此字符串存储在字节[]中,并能够稍后将其转换回来?我想我需要能够确定字节[]的编码方式。我该怎么做呢? 一些上下文:我需要字节[],以便压缩数据,将其存储在数据库中,然后解压缩并将未压缩的字节[]转换回原始字符串。这个字符串最初来自某个下载了网页

  • 本文向大家介绍C语言实现将字符串转换为数字的方法,包括了C语言实现将字符串转换为数字的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C语言实现将字符串转换为数字的方法。分享给大家供大家参考。具体实现方法如下: C语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)的数字。以下是用atoi()函数将字符串转换为整数的一个例子:   atoi()函数只有一个参数

  • 主要内容:字符串结束标志(划重点),字符串长度用来存放字符的数组称为 字符数组,例如: 字符数组实际上是一系列字符的集合,也就是 字符串(String)。在C语言中,没有专门的字符串变量,没有string类型,通常就用一个字符数组来存放一个字符串。 C语言规定,可以将字符串直接赋值给字符数组,例如: 数组第 0 个元素为 ,第 1 个元素为 ,第 2 个元素为 ,后面的元素以此类推。 为了方便,你也可以不指定数组长度,从而写作: 给字符数组赋