字符串中的表情符号数量?

Joe*_*Joe 6 string nsstring ios emoji swift

最近添加了iOS 9.1 emojis,以及肤色的可用性等,如何正确计算字符串中的Emojis数量,假设字符串是由emojis独特制作的?

请记住,表情符号的长度可能会有所不同.

NSString.length或string.characters.count

""返回2
"✊"返回4
""或""或""返回1!
""返回4(通常应显示为1个家庭表情符号)
等...

t4n*_*hpt 5

我进行了扩展String以计算字符串中表情符号的数量:

extension String {
    func countEmojiCharacter() -> Int {

        func isEmoji(s:NSString) -> Bool {

            let high:Int = Int(s.characterAtIndex(0))
            if 0xD800 <= high && high <= 0xDBFF {
                let low:Int = Int(s.characterAtIndex(1))
                let codepoint: Int = ((high - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000
                return (0x1D000 <= codepoint && codepoint <= 0x1F9FF)
            }
            else {
                return (0x2100 <= high && high <= 0x27BF)
            }
        }

        let nsString = self as NSString
        var length = 0

        nsString.enumerateSubstringsInRange(NSMakeRange(0, nsString.length), options: NSStringEnumerationOptions.ByComposedCharacterSequences) { (subString, substringRange, enclosingRange, stop) -> Void in

            if isEmoji(subString!) {
                length++
            }
        }

        return length
    }
}
Run Code Online (Sandbox Code Playgroud)

测试:

let y = "xxxzzz"

print(y.countEmojiCharacter())
// result is 3
Run Code Online (Sandbox Code Playgroud)