我正在尝试使用带有Prime符号的字符串,但我遇到了String.StartsWith方法的一些问题。为什么以下代码抛出异常?
string text_1 = @"123456";
string text_2 = @"ʹABCDEF";
string fullText = text_1 + text_2;
if (!fullText.StartsWith(text_1))
{
throw new Exception("Unexplained bad error.");
}
我怀疑这个问题是因为这个Prime符号(char)697被视为重音,因此正在更改之前的字母。 (我不认为它应该是 - 它应该是the prime symbol,因此不应该改变它前面的数字)。我不确定如何测试这个。我确实尝试了this answer中提出的方法,但它返回了false:
IsLetterWithDiacritics(text_1[5]) // == False
IsLetterWithDiacritics(fullText[5]) // == False
IsLetterWithDiacritics(fullText[6]) // == False
感谢您的帮助。
答案 0 :(得分:3)
rnorm()
或MODIFIER LETTER PRIME是间距修饰符字母。它不是一个真正的角色,而是一个修改前一个角色的特殊用途符号。
修饰符字母是一个独立的间距字符,与组合字符一样,表示对前一个字母的修改。
ʹ
返回false,因为在你的连接字符串中, 6 实际上被后面附加的主要符号修改。
答案 1 :(得分:2)
来自MSDN:
当您调用字符串比较方法(如String.Compare,String.Equals或String.IndexOf)时,应始终调用包含StringComparison类型参数的重载,以便您可以指定方法的比较类型施行。有关更多信息,请参阅.NET Framework中使用字符串的最佳实践。
如果您想进行非语言比较,则应使用StringComparison.Ordinal
。下面的代码不会引发异常。
string text_1 = @"123456";
string text_2 = @"ʹABCDEF";
string fullText = text_1 + text_2;
if (!fullText.StartsWith(text_1, StringComparison.Ordinal))
{
throw new Exception("Unexplained bad error.");
}