gpt4 book ai didi

c# - String.Split() 和 String.IndexOf() 之间组合变音符号的不同行为

转载 作者:太空狗 更新时间:2023-10-29 20:39:04 24 4
gpt4 key购买 nike

如果我有一个包含组合变音符号的字符串,不同字符串函数之间的行为似乎有些混淆。如果我使用 String.IndexOf(),它将组合变音符号并找到正确的字符。如果我使用 String.Split(),出于某种原因它不会组合它们并且不会找到组合的字符。

示例代码:

string test = "abce\u0308fgh";
Console.WriteLine(test.IndexOf("e"));
Console.WriteLine(test.IndexOf("ë"));

这将按预期工作,这意味着找不到 e,但找到了 ë。但出于某种原因,这并不相似:

string test = "abcde\u0308fgh";
Console.WriteLine(test.Split('e').Length.ToString());
Console.WriteLine(test.Split('ë').Length.ToString());

出于某种原因,Split() 不会合并变音符号,而是按 e 拆分,但不会按 ë 拆分。

这个功能有什么原因吗?有没有办法让 IndexOf() 函数不组合变音符号,或者最好是 Split() 功能是什么?

编辑:注意到我之前写错了代码,它有“e”而不是“e”

string test = "abce\u0308fgh";
Console.WriteLine(test.IndexOf('e'));
Console.WriteLine(test.IndexOf('ë'));

这也像 Split() 一样,所以它不在方法之间,而是在获取字符或字符串之间。

最佳答案

实际上,当我将您的示例代码复制并粘贴到一个空白程序中时,我得到了我可能期望的行为:IndexOf()Split() 都执行不将组合字符视为传入的 ë 搜索字符。 IE。对 IndexOf('ë') 的调用为我返回 -1,这与您描述 Split() 行为的方式一致。

就是说,如果您希望 Split() 将单字符版本的这种双字符表示视为实际上最初是单字符版本,您只需调用 string.Normalize()Split() 之前。例如:

Console.WriteLine(test.Normalize().Split('ë').Length);

Normalize() 方法有一个重载,可以让您控制规范化的确切类型,如果需要的话(它不在您提供的示例中)。

关于c# - String.Split() 和 String.IndexOf() 之间组合变音符号的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29661951/

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