1
15
决定对我感觉到的两种最规范的方法,加上一种我认为是未呈现的方法进行计时;下面是我发现的(发布构建): ReplaceAtChars: 86ms ReplaceAtSubstring: 258ms ReplaceAtStringBuilder: 161ms 显然,char数组方法是目前为止运行时优化的最佳方法。这实际上表明电流 主要的 答案(StringBuilder)可能不是 最好的 回答。 下面是我使用的测试:
|
2
30
使用A
string is immutable as described by MSDN :
所以你需要这样的东西:
|
3
8
.NET中的字符串是不可变的。那意味着你 不能 编辑它们。你所能做的就是做新的。你必须这样做:
|
4
8
字符串是不可变的,所以不能只更改它。 您可以从字符串中获取char[],进行更改,并从更改后的数组中创建新的字符串。 您可以使用诸如replace之类的东西,尽管它们不允许您像c一样控制每字符的基础。它们还将在每次更改时生成一个新字符串,其中char[]样式允许您进行所有更改,然后从中生成一个新字符串。 |
5
5
不能,因为字符串是不可变的。 您可以随时滚动自己的扩展方法来执行类似的操作:
就像这样称呼它:
|
6
4
如布莱恩所说,使用
每当您再次需要字符串时,请调用
|
7
3
|
8
3
|
9
2
这是我放在一起的一个有趣的。现在,请记住这不是很有效,特别是对于简单的替换。然而,编写并使用相当可读的使用模式是很有趣的。它还强调了一个鲜为人知的事实,即字符串实现了IEnumerable。
下面是一些示例用法:
输出: Old: test New: SOMEterrificPIG 同样的方法的另一个版本(速度并不是那么慢)是直接使用子字符串:
在一个很好的例子中,你为什么要分析你的代码,为什么你可能应该 不 在生产代码中使用我的LinqToStrings实现,这里有一个计时测试:
它在1000次迭代中测量计时器计时周期,生成以下输出: Using LinqToStrings: 3,818,953 Using Substrings: 1,157 |
10
2
字符串在C中是不可变的。使用StringBuilder类或字符数组。
IIRC,.NET使用所谓的字符串池。每次创建新的字符串文字时,它都作为字符串池的一部分存储在内存中。如果创建与字符串池中的字符串匹配的第二个字符串,两个变量将引用相同的内存。 当您尝试执行类似于在.NET中使用字符串将“b”字符替换为“d”字符的操作时,您的程序实际上正在字符串池中创建第二个值为“doom”的字符串,但从您的角度看,它似乎根本没有发生这种情况。通过读取代码,我们可以假定字符被替换。 我提出这个问题是因为我经常遇到这个问题,人们经常问,当一个字符串可以做同样的事情时,为什么他们应该使用StringBuilder。从技术上讲,它不能,但它的设计方式似乎可以。 |
11
1
|
Dima Malko · 如何在指定符号前添加符号? 2 年前 |
shekharsabale · 从列表元素捕获子字符串 2 年前 |
Manny · 如何比较Perl中的字符串? 2 年前 |
Manan Girdhar · 拆分字符串并仅在java中使用第二部分 2 年前 |
AnxiousLuna · Python使用len()获取数组索引数 2 年前 |
antonoyaro8 · 数据帧中每列上的Grepl 2 年前 |