可参考如下代码中的删除逻辑:@Entry @Component struct Index { @State message: string = ''; build() { Column() { TextInput({ text: $$this.message }).backgroundColor('#00000000').borderWidth(1) Button('x').onClick(() => { if (this.message.length > 0) { const c = this.message.charAt(this.message.length-2); //单个emoji的组合就是高位+低位,所以对于辅助平面内的代理对,做到整个移除或保留即可 //如果字符串的最后一个是表情包,则包含两个字符(高位+低位置) //如果判断倒数第二个字符满足码位范围['\uD800','\uDBFF'],满足则为emoji,则需要特殊截取,同时剔除掉最后两个字符,才能将最后一个emoji表情包删除 if (c >= '\uD800' && c <= '\uDBFF') { console.info("yes:"+c) this.message = this.message.substring(0, this.message.length - 2); //如果判断倒数第二个字符不满足条件,则最后一个是非emoji表情包的普通字符,正常截取,剔除掉最后一个字符,即可 }else { this.message = this.message.substring(0, this.message.length - 1); } } }) } .width("100%") .height("100%") .justifyContent(FlexAlign.Center) } }
可参考如下代码中的删除逻辑: