我不明白这是怎么回事:
let strA = "0123456789"
let fromA = String.Index(encodedOffset: 2)
let toA = String.Index(encodedOffset: 8)
print("\(String(strA[fromA..<toA]))") // Prints "234567".
let strB = "01235689"
let fromB = String.Index(encodedOffset: 2)
let toB = String.Index(encodedOffset: 8)
print("\(String(strB[fromB..<toB]))") // Prints "23".
我希望最底行打印"2356"
,但它打印"23"
。这似乎与unicode代码点和部分砍掉unicode表情符号最后一个字符有关。
如何使用可见字符的偏移量获得期望的"2356"
字符串?
我的问题源于Twitter的API及其扩展的tweets JSON对象,这些对象要求您使用display_text_range
值将tweet文本切成大小。现在,只要鸣叫中有表情符号,我的代码就会崩溃,因为如上所述,我的子字符串代码会破坏字符串。
答案 0 :(得分:0)
以下内容可以满足我的要求,并打印"2356"
。
let strB = "01235689"
print("String count \(strB.count).")
let fromB = strB.index(strB.startIndex, offsetBy: 2)
let toB = strB.index(strB.startIndex, offsetBy: 8)
print("\(String(strB[fromB..<toB]))")
请注意,不要使用:
let fromB = String.Index(encodedOffset: 2)
let toB = String.Index(encodedOffset: 8)
我使用:
let fromB = strB.index(strB.startIndex, offsetBy: 2)
let toB = strB.index(strB.startIndex, offsetBy: 8)