假设我有一个 edittext 字段,我必须在其上实现“退格”功能。
删除一个简单的字母字符很好,它可以工作:
Character.isLetter(inputConnection.getTextBeforeCursor(1, 0).toString()) {
inputConnection.deleteSurroundingText(1, 0);
}
当字符是表情符号时,问题就来了。
它的长度表示为 2 个 utf-16 字符,例如:
笑脸:
Unicode 代码点:U+1F600
Java转义:\ud83d\ude00
在这种情况下,我会简单地删除 2 个字符。
但是,在某些情况下,表情符号由多个代码点组成,例如:
彩虹旗:️</p>
Unicode 代码点序列:U+1F3F3 U+FE0F U+200D U+1F308
Java转义:\ud83c\udff3\ufe0f\u200d\ud83c\udf08
当我按退格键时,只有一个 java 转义字符被删除,而不是整个表情符号。例如标志,只有\udf08
最后一部分会被删除,向用户展示搞砸的表情符号。代理对检查并不能让我摆脱困境,我仍然会搞砸表情符号。
如何正确找出要删除的正确字符数量,以便在按退格键时删除 1 个完整的表情符号?(对于标志示例,我需要获得数字 6,才能完全删除它)