我有一个问题,我在android中搜索我的FTS表,并返回结果的字节偏移量:
col termno byteoffset size
1 0 111 4
但问题是,当使用cursor.getString(colNo)
时,它会给我一个UTF-16字符串,之后我无法记录文本的哪个字符是匹配的开始/结束。
但是我无法理解问题中的解决方案。那么在我知道字节偏移后,如何才能准确地知道字符串中的字符偏移(突出显示)?
答案 0 :(得分:3)
将您的字符串编码回Sqlite使用的相同编码,然后以字节形式提取您想要的部分并将它们转换回字符串:
String chars = cursor.getString(colNo);
byte[] bytes = chars.getBytes("UTF-8");
String prefix = new String(bytes, 0, byteOffset, "UTF-8");
String match = new String(bytes, byteOffset, size, "UTF-8");
int charOffset = prefix.length;
int charSize = match.length;
(假设您的数据被编码为UTF-8字节,这很可能。)
不幸的是,您必须完成所有这些冗余编码和解码。也许值得添加优化来缩短纯ASCII常见情况。