文档和语言在VS 2008和2010之间有所不同:
在内部,文本存储为Char对象的只读集合,每个Char对象代表一个以UTF-16编码的Unicode字符.... 字符串的长度表示字符数,无论字符是否由Unicode代理项对形成.要访问字符串中的各个Unicode代码点,请使用StringInfo对象.- http://msdn.microsoft.com/en-us/library/ms228362%28v=vs.90%29.aspx
在内部,文本存储为Char对象的顺序只读集合.... 字符串的Length属性表示它包含的Char对象的数量,而不是Unicode字符的数量.要访问字符串中的各个Unicode代码点,请使用StringInfo对象.- http://msdn.microsoft.com/en-us/library/ms228362%28v=VS.100%29.aspx
两种情况下使用的语言都没有明确区分"字符","Unicode字符","字符类","Unicode代理项对"和"Unicode代码点".
VS2008文档中的语言声明"字符串表示字符数,无论字符是否由Unicode代理项对形成"似乎将"字符"定义为可能是Unicode代理项对的结果的对象,这表明它可能代表一个4字节的序列而不是一个2字节的序列.它还特别指出一个"char"对象以UTF-16编码,这表明它可以代表一个代理对(4个字节而不是2个字节).我很确定这是错的.
VS2010文档更加精确.它区分了"char"和"Unicode character",但不区分"Unicode character"和"Unicode code point".如果代码点引用代理对的一半,并且"Unicode字符"代表完整对,则"Char"类的名称不正确,并且根本不引用"Unicode字符"(他们声明它不),它真的是一个Unicode代码点.
那么以下两个陈述都是真的吗?(是的,我认为.)
我有一个字符串,我想替换它的一部分.棘手的部分是我不能使用Regex.replace,因为我只知道字符串中数据的开始和结束位置.例如,如果字符串如下所示:
I love cats, some more stuff here, we dont know how much more
Run Code Online (Sandbox Code Playgroud)
我有start=8和end=11.我想把那部分替换成我需要的东西.这一次让我们这样说dogs新字符串将如下所示:
I love dogs, some more stuff here, we dont know how much more
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?
我有一个像这样的字符串:
string word="HELLO";
Run Code Online (Sandbox Code Playgroud)
并清除字符串索引,如下所示:
IList<string> clearIndexes = indexes;// for example {2,4}
Run Code Online (Sandbox Code Playgroud)
我想要的是什么
*E*L*// the 2th and 4th elements are clear and the other should be shown with *,
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
如何覆盖字符串?例:
string text = "abcdefghijklmnopqrstuvwxyz".OverwriteWith("hello world", 3);
// text == "abchello worldopqrstuvwxyz"
Run Code Online (Sandbox Code Playgroud)
当然这种方法不存在.但