gpt4 book ai didi

c# - IndexOf 和序号字符串比较

转载 作者:太空狗 更新时间:2023-10-29 18:35:21 24 4
gpt4 key购买 nike

我的问题是 String.IndexOf返回 -1。我希望它返回 0

参数:

text = C:\\Users\\User\\Desktop\\Sync\\̼(注意 Combining Seagull Below 字符)

stringToTrim = C:\\Users\\User\\Desktop\\Sync\\

当我使用 int index = text.IndexOf(stringToTrim); 检查索引时,index 的值为 -1 .我发现使用序号字符串比较解决了我的这个问题:

int index = text.IndexOf(stringToTrim, StringComparison.Ordinal);

在线阅读,许多 Unicode 字符(如 U+00B5U+03BC)映射到相同的符号,因此最好对此进行扩展并规范化两个字符串:

int index = text.Normalize(NormalizationForm.FormKD).IndexOf(stringToTrim.Normalize(NormalizationForm.FormKD), StringComparison.Ordinal);

这是检查一个字符串在哪个索引处包含另一个字符串的所有连续字符的正确方法吗?所以这个想法是,当你想检查符号是否匹配时你规范化,但是当你想通过它们的编码值检查字符时你不规范化(因此允许重复的符号)?另外,有人可以解释为什么 int index = text.IndexOf(stringToTrim); 没有在字符串的开头找到匹配项吗?换句话说,它到底在做什么?我原以为它会从字符串的开头到字符串的结尾开始搜索字符。

最佳答案

这种行为对我来说非常有意义。您正在使用一个组合字符,它与前面的字符组合,将其变成一个不同的字符,该字符与 '\\' 字符不匹配你'已在搜索字符串的末尾指定。这样可以防止找到您要查找的整个字符串。如果您改为查找 "C:\\Users\\User\\Desktop\\Sync",它会找到它。

使用 StringComparison.Ordinal 告诉 .NET 忽略字符的各种规则,只查看它们的确切序数值。这似乎是您想要的,所以是的……这就是您应该做的。

“正确的做法”完全取决于你想要什么样的行为。许多字符串操作涉及向用户呈现或由用户提供的文本,应该以文化感知和 Unicode 感知的方式完成。其他时候,这是不可取的。根据您的需要选择正确的方法很重要。

关于c# - IndexOf 和序号字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27492586/

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