gpt4 book ai didi

Java根据utf-8编码索引查找字符串的索引

转载 作者:行者123 更新时间:2023-12-01 16:45:43 24 4
gpt4 key购买 nike

考虑以下字符串:

String text="un’accogliente villa del.";

我有单词“accogliente”的开始索引,即5。但它是根据utf-8编码预先计算出来的。

我想要单词 的确切索引,即 3 作为输出。即,我想从 5 中得到 3 作为输出。计算它的最佳方法是什么?

最佳答案

String text = "un’accogliente villa del."; // Unicode text
text = Normalizer.normalize(text, Form.NFC); // Normalize text

byte[] bytes = text.getBytes(StandardCharsets.UTF_8); // Index 5 UTF-8; 1 byte
char[] chars = text.toCharArray(); // Index 3 UTF-16; 2 bytes (indexOf)
int[] codePoints = text.codePoints().toArray(); // Index 3 UTF-32; 4 bytes

int charIndex = text.indexOf("accogliente");
int codePointIndex = (int) text.substring(0, charIndex).codePoints().count();
int byteIndex = text.substring(0, charIndex).getBytes(StandardCharsets.UTF_8).length;

UTF-32 是 Unicode 代码点,所有带有 U+XXXX 的符号的编号,其中可能多(或少)于4 个十六进制数字。

需要文本规范化,因为 é 可以是一个代码点或两个代码点,一个零宽度的 ´ 后跟一个 e .

UTF-8字节索引转UTF-16字符索引的问题:

int charIndex = new String(text.getBytes(StandardCharsets.UTF_8),
0, byteIndex, StandardCharsets.UTF_8).length();

关于Java根据utf-8编码索引查找字符串的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51708795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com