我正在将文本文件的内容写入StringBuilder,然后我想使用正则表达式对StringBuilder中包含的文本执行许多查找/替换操作.
我遇到了一个问题,因为StringBuilder替换函数不能接受正则表达式参数.
我可以在普通字符串上使用Regex.Replace,但我认为这是低效的,因为由于.net字符串是不可变的,因此需要在内存中创建两个字符串副本.
一旦我更新了文本,我打算将其写回原始文件.
什么是解决我问题的最佳和最有效的方法?
编辑
除了下面的答案,我发现以下问题也解释了我的问题 -
我一直想知道java中String/StringBuilder/StringBuffer的charAt函数的实现是什么的复杂性?那么StringBuffer/StringBuilder中的deleteCharAt()呢?
据我所知,当我做String baz = "foo" + "bar" + "123"Java编译器时,内部用一个替换表达式StringBuilder.然而,我们的Java老师告诉我们,总是StringBuilder明确使用明确的...
我是否正确假设我只需要在连接内部循环时显式使用StringBuilder,如Stack Overflow问题字符串生成器与字符串连接的答案中所示?是否有其他情况下,你应该明确地使用StringBuilder,而不是+或+=?
我知道我可以调用ToString().IndexOf(...),但我不想创建额外的字符串.我知道我可以手动编写搜索例程.我只是想知道为什么框架中不存在这样的例程.
Groovy支持用于创建StringBuilder/StringBuffer的文字语法,而不是通常的
def sb = new StringBuilder()
Run Code Online (Sandbox Code Playgroud)
但是,我似乎无法记住(或在Google上找到)正确的语法.
我知道System.Text.StringBuilder.NET中有一个AppendLine()方法,但是,我需要在一个开头添加一行代码StringBuilder.我知道你可以Insert()用来附加一个字符串,但我似乎无法使用一行,是否可以使用下一行字符?我正在使用VB.NET,所以答案更可取,但C#中的答案也可以.
最近我发现自己使用StringBuilder进行所有字符串连接,无论大小,但是在最近的性能测试中,我换掉了同事的stringOut = string1 +"." String2样式连接(在一个10000x +循环中使用,每次都是StringBuilder)用于StringBuilder只是为了看看它在次要连接中会有什么不同.
我发现,在性能测试的许多次运行中,无论是串联还是StringBuilder,更改都无论是更高还是更低(重申这是针对小型连接).
在什么时候,StringBuilder对象的"newing up"否定了使用它的好处?
如果我在方法中使用StringBuilder对象构建字符串,那么它是否有意义:
返回StringBuilder对象,让调用代码调用ToString()?
return sb;
Run Code Online (Sandbox Code Playgroud)
或者通过自己调用ToString()返回字符串.
return sb.ToString();
Run Code Online (Sandbox Code Playgroud)
我想如果我们返回小字符串或大字符串会有所不同.在每种情况下适合什么?提前致谢.
编辑:我不打算进一步修改调用代码中的字符串,但好点科林伯内特.
主要是,返回StringBuilder对象或字符串是否更有效?是否会返回对字符串的引用或副本?
在C中,我正在研究一个管理字节缓冲区的"类",允许将任意数据附加到结尾.我现在正在调查自动调整大小,因为底层数组使用调用填充realloc.这对任何使用过Java或C#的人都有意义StringBuilder.我知道如何调整大小.但是,没有任何人有任何建议,与理规定,关于有多少成长与每个调整缓冲区?
显然,在浪费的空间和过多的realloc调用之间存在折衷(这可能导致过度复制).我已经看过一些建议加倍的教程/文章.如果用户设法提供良好的初始猜测,这似乎是浪费.是否值得尝试在平台上舍入到两个或多个对齐大小的幂?
有没有人知道Java或C#在幕后做了什么?
以下在eclipse中没有为我返回任何内容,这是预期的行为吗?
StringBuilder sb = new StringBuilder("");
for(int i = 0; i < 256*256*2*6; i++) {
sb.append("a");
}
System.out.println(sb.toString());
Run Code Online (Sandbox Code Playgroud)
代码返回时没有错误,并且大小与内存容量相当,而不像stringbuilder 可容纳的最大字符数
解决:问题在于eclipse控制台和启用(窗口 - >首选项 - >运行/调试 - >控制台 - >固定宽度控制台)将正常打印该行.
stringbuilder ×10
c# ×4
java ×4
.net ×3
string ×3
c ×1
eclipse ×1
groovy ×1
performance ×1
regex ×1
return-type ×1
return-value ×1
vb.net ×1