是什么区别StringWriter和StringBuilder,当我应该使用一个或其他?
Java中的String和StringBuffer有什么区别?
String的最大大小是多少?
有人告诉我,用StringBuilder连接字符串会更快.我已经更改了我的代码,但是我没有看到任何属性或方法来获取最终的构建字符串.
我怎样才能得到这个字符串?
最近出现了一个关于使用String.Format()的问题.我的部分答案包括使用StringBuilder.AppendLine(string.Format(...))的建议.Jon Skeet认为这是一个不好的例子,并建议使用AppendLine和AppendFormat的组合.
在我看来,我从来没有真正适应使用这些方法的"首选"方法.我想我可能会开始使用类似下面的东西,但我很想知道其他人使用什么作为"最佳实践":
sbuilder.AppendFormat("{0} line", "First").AppendLine();
sbuilder.AppendFormat("{0} line", "Second").AppendLine();
// as opposed to:
sbuilder.AppendLine( String.Format( "{0} line", "First"));
sbuilder.AppendLine( String.Format( "{0} line", "Second"));
Run Code Online (Sandbox Code Playgroud) 我最近遇到了一个Java 8类StringJoiner,它使用分隔符添加了String并添加了前缀和后缀,但我无法理解这个类的需要,因为它也在StringBuilder后端使用,并且还执行非常简单的附加操作字符串.
我是否因为没有真正理解这门课的真正目的而错过了一些东西?
我开始使用StringBuilder优先于直连接,但似乎它缺少一个关键的方法.所以,我自己实现了它,作为扩展:
public void Append(this StringBuilder stringBuilder, params string[] args)
{
foreach (string arg in args)
stringBuilder.Append(arg);
}
Run Code Online (Sandbox Code Playgroud)
这会导致以下混乱:
StringBuilder sb = new StringBuilder();
...
sb.Append(SettingNode);
sb.Append(KeyAttribute);
sb.Append(setting.Name);
Run Code Online (Sandbox Code Playgroud)
进入:
sb.Append(SettingNode, KeyAttribute, setting.Name);
Run Code Online (Sandbox Code Playgroud)
我可以使用sb.AppendFormat("{0}{1}{2}",...,但这似乎更不可取,并且仍然更难阅读.我的扩展是一个好方法,还是以某种方式破坏了它的好处StringBuilder?我不是试图过早地优化任何东西,因为我的方法更多的是关于可读性而不是速度,但我也想知道我不是在自己的脚下射击.
将StringBuilder写入System.IO.Stream的最佳方法是什么?
我目前在做:
StringBuilder message = new StringBuilder("All your base");
message.Append(" are belong to us");
System.IO.MemoryStream stream = new System.IO.MemoryStream();
System.Text.ASCIIEncoding encoding = new ASCIIEncoding();
stream.Write(encoder.GetBytes(message.ToString()), 0, message.Length);
Run Code Online (Sandbox Code Playgroud) StringBuilder类是如何实现的?每次追加时它是否在内部创建新的字符串对象?
在"有效的Java"一书中,Josh Bloch说
StringBuffer在很大程度上已经过时,应该被非同步实现'StringBuilder'取代
.
但根据我的经验,我仍然看到StringBuffer类的广泛使用.为什么StringBuffer类现在已经过时,为什么StringBuilder优先于StringBuffer,除非由于非同步而提高了性能?
我必须使用StringBuilder而不是String的字符串,因为这个项目坚持使用.NET 1.1.它真的让我的风格变得痉挛,让我觉得我穿着破旧的豹纹皮肤哑巴,拖着一块块状的俱乐部穿过泥土.
无论如何,我想编写一系列调试消息,我已写入文件以便在我的闲暇时学习,因为屏幕上有太多东西要看(MessageBox没有滚动条).编写文件的一些简单方法似乎在.NET 1.1中不可用.我也没有访问Environment.Newline来干净地分隔我追加的行(AppendLine在这个古老的StringBuilder版本中也不可用).
我猜想......在.NET 1.1(C#)中将StringBuilder的内容写出来的最简单的方法是什么?手持设备上没有"C"驱动器,因此我认为我必须将它写入"\ hereIAm.txt"左右.
stringbuilder ×10
c# ×6
.net ×5
string ×5
java ×3
stringbuffer ×2
file-io ×1
formatting ×1
java-8 ×1
stream ×1
stringwriter ×1
windows-ce ×1