Ios 如何将未编码字符串拆分为字符
我有像Ios 如何将未编码字符串拆分为字符,ios,arrays,swift,string,unicode,Ios,Arrays,Swift,String,Unicode,我有像 "\U0aac\U0ab9\U0ac1\U0ab5\U0a9a\U0aa8", "\U0a97\U0ac1\U0ab8\U0acd\U0ab8\U0acb", "\U0aa6\U0abe\U0ab5\U0acb", "\U0a96\U0a82\U0aa1" 但是我想用unicode字符分割这个字符串 我不知道该怎么办。我知道按功能划分的组件,但在这里没有用。 \任何帮助都会出现因此,返回的字符串已经有了“\”,因为为了使用组件,您需要有一个额外的转义“\”,以便能够执行以下操作: va
"\U0aac\U0ab9\U0ac1\U0ab5\U0a9a\U0aa8",
"\U0a97\U0ac1\U0ab8\U0acd\U0ab8\U0acb",
"\U0aa6\U0abe\U0ab5\U0acb",
"\U0a96\U0a82\U0aa1"
但是我想用unicode字符分割这个字符串
我不知道该怎么办。我知道按功能划分的组件,但在这里没有用。
\任何帮助都会出现因此,返回的字符串已经有了“\”,因为为了使用组件,您需要有一个额外的转义“\”,以便能够执行以下操作:
var listofCodes = ["\\U0aac\\U0ab9\\U0ac1\\U0ab5\\U0a9a\\U0aa8", "\\U0aac\\U0ab9\\U0ac1\\U0ab5\\U0a9a\\U0aa8"]
var unicodeArray :[String] = []
listofCodes.forEach { string in
unicodeArray
.append(contentsOf: string.components(separatedBy: "\\"))
unicodeArray.removeAll(where: {value in value == ""})
}
print(unicodeArray)
一旦您指定如何获取这些字符串,我将修改此答案,因为我从一开始就收到无效字符串错误。如果您获取的字符串确实包含
\U
字符,则需要手动解析它们并提取unicode标量值。大概是这样的:
let strings = [
"\\U0aac\\U0ab9\\U0ac1\\U0ab5\\U0a9a\\U0aa8",
"\\U0a97\\U0ac1\\U0ab8\\U0acd\\U0ab8\\U0acb",
"\\U0aa6\\U0abe\\U0ab5\\U0acb",
"\\U0a96\\U0a82\\U0aa1"
]
for str in strings {
let chars = str.components(separatedBy: "\\U")
var string = ""
for ch in chars {
if let val = Int(ch, radix: 16), let uni = Unicode.Scalar(val) {
string.unicodeScalars.append(uni)
}
}
print(string)
}
您可以映射数组,将其元素拆分为非六位数值,将其压缩映射为UInt32值,使用它们初始化unicode标量,并将数组的结果元素映射为unicode DescalarView,并使用它初始化一个新字符串:
let arr = [
#"\U0aac\U0ab9\U0ac1\U0ab5\U0a9a\U0aa8"#,
#"\U0a97\U0ac1\U0ab8\U0acd\U0ab8\U0acb"#,
#"\U0aa6\U0abe\U0ab5\U0acb"#,
#"\U0a96\U0a82\U0aa1"#]
这会打印出来 [”બહુવચન", "ગુસ્સો", "દાવો", "ખંડ"]
您是如何获得这些stings的?这些是古吉拉特语单词Strings我理解这一部分,但您是自己键入它们还是从API检索它们?因为API很糟糕……您不能用这种方式格式化字符串。这里的“字符”是什么?请给出实际需要的输出。但是我们需要的部分在哪里“按unicode字符拆分字符串”?@matt如果这不是OP想要实现的,我可以简单地删除我的帖子,但我认为他不知道如何表达他的需要。可能是真的!我询问了所需输出的示例,但没有回应。因此我们无法确定。
let strings = arr.map {
$0.split { !$0.isHexDigit }
.compactMap { UInt32($0, radix: 16) }
.compactMap(Unicode.Scalar.init)
}.map { String(String.UnicodeScalarView($0)) }
print(strings)