字符串.当下一个字符是质数符号(char)时,StartsWith不工作697
本文关键字:StartsWith 工作 char 字符 下一个 符号 字符串 | 更新日期: 2023-09-27 18:15:38
我试图使用其中的素数符号的字符串,但我对字符串有一些问题。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.");
}
我怀疑这个问题是因为这个素数符号(char)697被视为重音,所以改变了它之前的字母。(我不认为它应该-它应该是质数符号所以不应该改变它前面的数字)我不太确定如何进行测试。我确实尝试了这个答案中提出的方法,但它返回false:
IsLetterWithDiacritics(text_1[5]) // == False
IsLetterWithDiacritics(fullText[5]) // == False
IsLetterWithDiacritics(fullText[6]) // == False
谢谢你的帮助
ʹ
or MODIFIER LETTER PRIME是一个空格修饰字母。它不是一个真正的字符,而是一个特殊的使用符号,用来修改前面的字符。
来自MSDN:
修饰字母是一个独立的空格字符,像组合字符一样,表示对前一个字母的修改。
string.StartsWith
返回false,因为在您连接的字符串中,6实际上是由后面附加的素数符号修改的。
From MSDN:
调用字符串比较方法时,如string。比较字符串。等于或字符串。IndexOf,您应该始终调用包含StringComparison类型参数的重载,以便您可以指定该方法执行的比较类型。有关更多信息,请参见. net框架中使用字符串的最佳实践。
如果要进行非语言比较,则应使用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.");
}