我只是好奇这个.令我感到震惊的是,StringBuilder的功能在功能上(如果不是技术上)与Stream相同 - 它是可以添加其他数据的数据仓.
再次,只是好奇.
我正在开发一个ASP.NET Web应用程序,我一直在遇到同样的问题:
有时我想从代码隐藏中将HTML写入页面.例如,我有一个页面,Editor.aspx,输出根据GET变量的值"视图"而变化.换句话说,"Editor.aspx?view = apples"输出的HTML不同于"Editor.aspx?view = oranges".
我目前用StringBuilder输出这个HTML.例如,如果我想创建一个列表,我可能会使用以下语法:
myStringBuilder.AppendLine("<ul id=\"editor-menu\">");
myStringBuilder.AppendLine("<li>List Item 1</li>");
myStringBuilder.AppendLine("</ul>");
Run Code Online (Sandbox Code Playgroud)
问题是我宁愿使用ASP.NET的List控件来实现这个目的,因为几行StringBuilder语法妨碍了我的代码的可读性.但是,ASP.NET控件倾向于输出复杂的HTML,具有唯一的ID,内联样式以及偶尔的内联JavaScript块.
我的问题是,是否有一个ASP.NET控件只代表一个通用的HTML标签?换句话说,是否存在类似以下示例的控件:
HTMLTagControl list = new HTMLTagControl("ul");
list.ID = "editor-menu";
HTMLTagControl listItem = new HTMLTagControl("li");
listItem.Text = "List Item 1";
list.AppendChild(listItem);
Run Code Online (Sandbox Code Playgroud)
我知道有包装器等等,但我宁愿从简化开始,而不是驯服ASP.NET的复杂性.
我在这个网站上看到了一个StringBuilder代码示例,说明了AppendFormat用法:
using System;
using System.Text;
class Program
{
static int[] _v = new int[]
{
1,
4,
6
};
static void Main()
{
StringBuilder b = new StringBuilder();
foreach (int v in _v)
{
b.AppendFormat("int: {0:0.0}{1}", v,
Environment.NewLine);
}
Console.WriteLine(b.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)=== Output of the program === int: 1.0 int: 4.0 int: 6.0
我在哪里可以找到有关字符串格式的高级规则的文档?
在c#中,我们正在为NHibernate构建一个包含"in语句"的查询.表达式的数量超过5000.如果我执行查询,我会收到错误.
我需要找到一种方法来打破大型字符串构建器并将它们存储在字符串构建器数组中,并在需要时执行多个查询以获得所需的输出.我们只有一个帐户拥有超过5000条记录,其余的都低于100.有人可以提出解决方法吗?
所有,
为什么建议将StringBuffer/ StringBuilderobject的大小初始化为2 ^ {1 ... n}的大小(尽管通常它将> 64).这样做会有什么优势/优化?
由于我使用的是 .NET 1.1,我不能使用字符串的泛型列表,因为泛型还不是语言的一部分。所以我正在尝试使用 StringBuilder,但得到这个错误消息:
“foreach 语句不能对'System.Text.StringBuilder' 类型的变量进行操作,因为'System.Text.StringBuilder' 不包含'GetEnumerator' 的定义,或者它是不可访问的”
使用此代码:
public StringBuilder linesToSend;
. . .
foreach (string _line in this.linesToSend)
{
serialPort.Write(_line);
}
Run Code Online (Sandbox Code Playgroud)
我的代码有问题吗,或者 StringBuilder 真的不允许 foreach 循环?如果是后者,String[] 是我最好的求助方式吗?
如何在StringBuilder中添加字节顺序标记?(我必须将一个字符串传递给另一个将其保存为文件的方法,但我无法修改该方法).
我试过这个:
var sb = new StringBuilder();
sb.Append('\xEF');
sb.Append('\xBB');
sb.Append('\xBF');
Run Code Online (Sandbox Code Playgroud)
但是当我用十六进制编辑器查看它时,它会添加以下序列:
C3 AF C2 BB C2 BF
字符串很大,所以不用来回转换为字节数组就可以了.
编辑: 在评论中提问后澄清.我必须将字符串传递给另一个接受字符串的方法,并在Azure Blob存储上创建它的文件.我无法修改其他方法.
我正在尝试将一些数字附加到字符串中,该字符串已经包含波斯字符,并且StringBuilder始终将波斯语数字附加到字符串中.
StringBuilder sb = new StringBuilder();
sb.Append( other things );
sb.Append("', '");
sb.Append("1234234");
sb.Append("', ");
Run Code Online (Sandbox Code Playgroud)
即使我在上面的代码中明确使用英文数字,我仍然最终得到波斯数字.如何将英文数字附加到此字符串?
UPDATE
这些行模拟了我的问题,您可以通过跟踪此代码来查看波斯语数字:
StringBuilder temp = new StringBuilder();
temp.Append("INSERT INTO [db] (....) VALUES ('21211221', 111555,
'2015/12/12', '??? ???????? ', '???? ???? ????");
temp.Append("', '");
temp.Append("234234");
Run Code Online (Sandbox Code Playgroud)
最后一个附加应该是英文编号,但事实并非如此.
我需要在开头插入字符串.现在我StringBuilder.Insert(0, stringToInsert)用来插入前面,但它需要花费很多时间(大约2分钟,80,000个字符串).
该append()方法运行速度更快(80,000个字符串为30秒),但这不是我需要的顺序.如何反转字符串的顺序(而不是字符串本身)并减少插入时间?
我正在测试Strings,我提出了以下代码:
public static void main(String[] args){
StringBuilder sb1 = new StringBuilder("Cuba");
String str1 = sb1.toString();
// n1
System.out.println(str1 == str2);
}
Run Code Online (Sandbox Code Playgroud)
在n1如果我把:
String str2 = sb1.toString();
Run Code Online (Sandbox Code Playgroud)
我得到false.但是,如果我放置:
String str2 = str1;
Run Code Online (Sandbox Code Playgroud)
我得到true.
我不确定为什么会发生这种情况:两个代码都指的是同一个实例,因此,两个输出必须是true.
知道为什么两个输出都不同吗?我知道如何比较字符串,我只是对结果不同的原因感到好奇.