字符串.当下一个字符是质数符号(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

谢谢你的帮助

字符串.当下一个字符是质数符号(char)时,StartsWith不工作697

ʹ 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.");
}