为啥 IndexOf 在匈牙利文化中找不到字符 N 与 Y 的组合?
Posted
技术标签:
【中文标题】为啥 IndexOf 在匈牙利文化中找不到字符 N 与 Y 的组合?【英文标题】:Why can't IndexOf find the character N in combination with Y in hungarian culture?为什么 IndexOf 在匈牙利文化中找不到字符 N 与 Y 的组合? 【发布时间】:2014-07-21 03:41:05 【问题描述】:对字符串调用的IndexOf
函数返回-1
,而肯定存在匹配项。
string sUpperName = "PROGRAMOZÁSI NYELVEK II. ADA EA+GY. (BSC 08 A)";
string sUpperSearchValue = "N";
sUpperName.IndexOf(sUpperSearchValue); // Returns -1
sUpperSearchValue = "NY";
sUpperName.IndexOf(sUpperSearchValue); // Returns 13
sUpperName[13]; // 78 'N'
sUpperSearchValue[0]; // 78 'N'
sUpperName[13] == sUpperSearchValue[0]; // true
你有什么想法,为什么它自己找到"NY"
而不是"N"
?如果我搜索字符串中的所有其他字母,它能够找到它,但不是"N"
。
小写字母也会出现同样的问题。
如果我输入 " N"
也不匹配," NY"
会匹配。
控制台中的图片
【问题讨论】:
这里都打印 13。您确定这是您自己使用的代码吗?你能把N
从NY
复制到sUpperSearchValue
吗? (实际ctrl+c,ctrl+v)。
也许在一种情况下N
来自拉丁字母,而在另一种情况下来自匈牙利(只是在这里猜测)字母。如果是这种情况,它们是不同的字符,它解释了这种行为
但这能解释一下,为什么只有一个字母重现了这个问题,而其他字母没有?
【参考方案1】:
在匈牙利 .NET 文化中,字母组合“ny”代表一个单独的字母,因此这里没有“N”,在您的示例中只有“NY”。
【讨论】:
将我的文化更改为HU-hu
确实可以让我重现问题;以前工作的代码现在为N
返回-1
。将N
与Y
分开也适用于匈牙利语;这是否意味着N
和Y
永远不能放在一起而不分别引用Ny
而不是N
和Y
?
@GrantWinney 是的,这些是不同的字母,两者都可用。虽然在这种情况下它的启发式是正确的,但这个字母组合是 ny(在“nyelvek”中),而不是两个字母。
是的,这是有道理的。感谢您的快速回复。
@JeroenVannevel 我不确定,在匈牙利语中这些很少出现相邻而不是指单个字母,但您始终可以使用不变的文化 (msdn.microsoft.com/en-us/library/…)以上是关于为啥 IndexOf 在匈牙利文化中找不到字符 N 与 Y 的组合?的主要内容,如果未能解决你的问题,请参考以下文章