gpt4 book ai didi

c# - 如何反转包含代理项对的字符串

转载 作者:太空狗 更新时间:2023-10-30 00:52:17 30 4
gpt4 key购买 nike

我写了这个方法来反转一个字符串

public string Reverse(string s)
{
if(string.IsNullOrEmpty(s))
return s;

TextElementEnumerator enumerator =
StringInfo.GetTextElementEnumerator(s);

var elements = new List<char>();
while (enumerator.MoveNext())
{
var cs = enumerator.GetTextElement().ToCharArray();
if (cs.Length > 1)
{
elements.AddRange(cs.Reverse());
}
else
{
elements.AddRange(cs);
}
}

elements.Reverse();
return string.Concat(elements);
}

现在,我不想开始讨论如何使这段代码更有效率,或者如何使用一种衬垫来代替。我知道您可以执行 Xors 和各种其他操作来潜在地改进此代码。如果我以后想重构代码,我可以很容易地做到这一点,因为我有单元测试。

目前,这可以正确地反转 BML 字符串(包括带有重音符号的字符串,如 "Les Misérables")和包含组合字符的字符串,如 "Les Mise\u0301rables"

我的包含代理对的测试如果像这样表达就可以工作

Assert.AreEqual("𠈓", _stringOperations.Reverse("𠈓"));

但是如果我这样表达代理对

Assert.AreEqual("\u10000", _stringOperations.Reverse("\u10000"));

然后测试失败。是否有也支持代理对的密封实现?

如果我在上面犯了任何错误,请指出这一点,因为我不是 Unicode 专家。

最佳答案

\u10000 是两个字符的字符串:က (Unicode 代码点 1000)后跟 0(可以通过检查方法中 s 的值来检测)。如果您反转两个字符,它们将不再匹配输入。

您似乎在寻找 Unicode Character 'LINEAR B SYLLABLE B008 A' (U+10000)十六进制代码点 10000。来自 Unicode character escape sequences on MSDN :

\u hex-digit hex-digit hex-digit hex-digit

\U hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit

因此您必须使用四位或八位数字。

使用 \U00010000(注意大写 U)或 \uD800\uDC00 而不是 \u10000

关于c# - 如何反转包含代理项对的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22114707/

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