Rob*_*boy 13 .net c# c++ string
在C#中编辑字符串中字符的最简洁方法是什么?
C++中C#的等价物是什么:
std::string myString = "boom";
myString[0] = "d";
Run Code Online (Sandbox Code Playgroud)
Bri*_*ndy 30
请StringBuilder改用.
字符串是不可变的 - 在创建对象后,字符串对象的内容无法更改,尽管语法使其看起来好像可以执行此操作.
所以你想要这样的东西:
StringBuilder sb = new StringBuilder("Bello World!");
sb[0] = 'H';
string str = sb.ToString();
Run Code Online (Sandbox Code Playgroud)
hem*_*emp 15
决定按照两种最规范的方法来判断我的感受,加上一个我没有代表的方式; 这是我发现的(发布版本):
ReplaceAtChars: 86ms ReplaceAtSubstring: 258ms ReplaceAtStringBuilder: 161ms
显然,Char数组方法是运行时最佳优化的.这实际上表明当前的主要答案(StringBuilder)可能不是最好的答案.
这是我用过的测试:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("ReplaceAtChars: " + new Stopwatch().Time(() => "test".ReplaceAtChars(1, 'E').ReplaceAtChars(3, 'T'), 1000000) + "ms");
Console.WriteLine("ReplaceAtSubstring: " + new Stopwatch().Time(() => "test".ReplaceAtSubstring(1, 'E').ReplaceAtSubstring(3, 'T'), 1000000) + "ms");
Console.WriteLine("ReplaceAtStringBuilder: " + new Stopwatch().Time(() => "test".ReplaceAtStringBuilder(1, 'E').ReplaceAtStringBuilder(3, 'T'), 1000000) + "ms");
}
}
public static class ReplaceAtExtensions
{
public static string ReplaceAtChars(this string source, int index, char replacement)
{
var temp = source.ToCharArray();
temp[index] = replacement;
return new String(temp);
}
public static string ReplaceAtStringBuilder(this string source, int index, char replacement)
{
var sb = new StringBuilder(source);
sb[index] = replacement;
return sb.ToString();
}
public static string ReplaceAtSubstring(this string source, int index, char replacement)
{
return source.Substring(0, index) + replacement + source.Substring(index + 1);
}
}
public static class StopwatchExtensions
{
public static long Time(this Stopwatch sw, Action action, int iterations)
{
sw.Reset();
sw.Start();
for (int i = 0; i < iterations; i++)
{
action();
}
sw.Stop();
return sw.ElapsedMilliseconds;
}
}
Run Code Online (Sandbox Code Playgroud)
.Net中的字符串是不可变的.这意味着你无法编辑它们.你所能做的就是创造新的.你必须做这样的事情:
string myString = "boom";
myString = "d" + myString.Substring(1);
Run Code Online (Sandbox Code Playgroud)
字符串是不可变的,所以你不能只改变它.
您可以从字符串中获取char [],进行更改,并从更改的数组中创建一个新字符串.
您可以使用替换之类的东西,尽管它们不会让您像C一样控制per-char基础.他们还会在每次更改时创建一个新字符串,其中char []样式允许您进行所有更改,然后从中创建一个新字符串.
你不能因为字符串是不可变的.
你总是可以推出自己的扩展方法来做类似的事情:
public static string ReplaceAtIndex(this string original,
int index, char character)
{
char[] temp = original.ToCharArray();
temp[index] = character;
return new String(temp);
}
Run Code Online (Sandbox Code Playgroud)
称之为:
string newString = myString.ReplaceAtIndex(0, 'd');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5819 次 |
| 最近记录: |