gpt4 book ai didi

c# - string.IndexOf() 无法识别修改后的字符

转载 作者:太空狗 更新时间:2023-10-29 19:52:59 27 4
gpt4 key购买 nike

当使用 IndexOf 查找后面跟有大值字符的字符(例如 char 700 是 ʼ)时,IndexOf 无法识别您所在的字符寻找。

例如

string find = "abcʼabcabc";   
int index = find.IndexOf("c");

在此代码中,索引应为 2,但返回 6。

有办法解决这个问题吗?

最佳答案

Unicode 字母 700 是一个 modifier apostrophe : 换句话说,它修改了字母 c。同样,如果您要使用“e”后跟 character 769 (0x301) ,它不再是真正的“e”:e 已被修改为带有重音符的 e。即:é。您会看到该字母实际上是两个字符:将其复制到记事本并按退格键(整洁,是吧?)。

您需要在不进行任何语言比较的情况下进行“序数”比较(逐字节)。这将找到'c',并忽略它被下一个字母修改的语言事实。在我的 'e' 示例中,字节是 (65)(769),所以如果你逐字节查找 65,你会找到它,而这忽略了 (65)(769) 在语言上是与 (233) 相同:é。如果您在语言上搜索 (233),它将找到“等效”(65)(769):

string find = "abéabcabc";
int index = find.IndexOf("é"); //gives you '2' even though the "find" has two characters and the the "indexof" is one

希望这不会太困惑。如果您在实际代码中这样做,您应该在评论中准确解释您在做什么:就像在我的“e”示例中一样,通常您希望对用户数据进行语义等价,并为例如数据进行序号等价。常量(希望不会像这样不同,以免你的 successor hunt you down with an axe )。

关于c# - string.IndexOf() 无法识别修改后的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19496392/

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