标签: stringbuilder

当字符数未知时定义 StringBuilder 容量

我知道,为了良好的实践,StringBuilder应该使用预期内容的容量值进行初始化。否则,编译后增加大小将是一个昂贵的操作。

我的问题是,如果我们不知道预期的大小,应该如何处理?是否有一个标准值/方法来避免幕后昂贵的操作?

如果没有,如果容量大于初始化时给定的值,是否有可能在代码中发出警报/记录?

java stringbuilder capacity

0
推荐指数
1
解决办法
127
查看次数

Stringbuilder does not create new instance if the initial capacity set too small but a book says otherwise

StringBuilder sb = new StringBuilder("test", 4);
sb.Append('\n');
sb.AppendLine("test1");
sb.AppendLine("test2");
sb.AppendLine("test3");
sb.AppendLine("test4");
Run Code Online (Sandbox Code Playgroud)

looking on IL code there is only one newobj line, but I thought there should be more instances of StringBuilder class since it should increase its capacity by creating new object? Or I got it wrong?

// [3 1 - 3 49]
    IL_0000: ldstr        "test"
    IL_0005: ldc.i4.4
    IL_0006: newobj       instance void [System.Runtime]System.Text.StringBuilder::.ctor(string, int32)
    IL_000b: stloc.0      // sb

    // [4 1 - 4 17]
    IL_000c: ldloc.0      // sb
    IL_000d: ldc.i4.s …
Run Code Online (Sandbox Code Playgroud)

c# stringbuilder

0
推荐指数
1
解决办法
94
查看次数

在使用StringBilder的StringBuilder时,特别之处

可能重复:
Java中的StringBuilder和StringBuffer

我想知道StringBuilder和StringBuffer之间的区别.在StringBuffer中,它自动分配16个字符.当我们添加一个字符串"hello"时,它的容量增加到21.可以有人澄清我的怀疑吗?

java stringbuilder stringbuffer

-1
推荐指数
1
解决办法
645
查看次数

在为变量赋值之前使用变量?

从MSDN文章我读到我应该使用StringBuilder而不是连接普通字符串.但是我不知道为什么我会得到以下错误:"在赋值之前使用变量'ShowString'.在运行时可能会产生空引用异常."

以下代码:

Dim ShowString As StringBuilder
    Dim ShowSort As StringBuilder
    'ShowString.
    ShowString.Append("POS,tdate,Product")
    '========Show Options==================
    If CheckBox1.Checked = True Then
        ShowString.Append(",tkey")
    End If
    If CheckBox2.Checked = True Then
        ShowString.Append(",Price")
    End If
    If CheckBox3.Checked = True Then
        ShowString.Append(",FID")
    End If
    '==========End Show Options============

    '=========Sort Options================
    If RadioButton1.Checked = True Then
        ShowSort.Append("tdate")
        If RadioButton8.Checked Then
            ShowSort.Append(" desc")
        End If
    End If
    If RadioButton2.Checked = True Then
        ShowSort.Append("tkey")
        If RadioButton8.Checked Then
            ShowSort.Append(" desc")
        End If
    End If
    '=======End Sort Options=============
    Dim sort As String …
Run Code Online (Sandbox Code Playgroud)

vb.net stringbuilder

-1
推荐指数
1
解决办法
3921
查看次数

为什么StringBuilder.Replace比String.Replace慢

根据以下单元测试方法,StringBuilder远比String.Replace慢,为什么每个人都说StringBuilder更快?我错过了什么吗?

[TestMethod]
public void StringReplace()
{
    DateTime date = DateTime.Now;
    string template = File.ReadAllText("file.txt");
    for (int i = 0; i < 100000; i++)
    {
        template = template.Replace("cat", "book" );
        template = template.Replace("book", "cat"); 
    }
    Assert.Fail((DateTime.Now - date).Milliseconds.ToString()); 
}

[TestMethod]
public void StringBuilder()
{
    DateTime date = DateTime.Now;
    StringBuilder template = new StringBuilder(File.ReadAllText("file.txt"));
    for (int i = 0; i < 100000; i++)
    {
        template.Replace("cat", "book");
        template.Replace("book", "cat"); 
    }
    Assert.Fail((DateTime.Now - date).Milliseconds.ToString());
}
Run Code Online (Sandbox Code Playgroud)

结果如下:

StringReplace - 335ms

StringBuilder - 799ms

c# performance stringbuilder

-1
推荐指数
1
解决办法
1494
查看次数

点上的String.split无法按预期工作

我有一个字符串= 12.05.2014

而我正试图用"分裂".但由于某种原因它返回空数组.

System.out.println(newDate);
System.out.println(newDate.length());
String [] dateCells = newDate.split(".");

StringBuilder sBuilder = new StringBuilder();
sBuilder.append(dateCells[2]).append(dateCells[0]).append(dateCells[1]);
System.out.println(sBuilder.toString());
Run Code Online (Sandbox Code Playgroud)

输出是:

12.05.2014
10
            //empty line
Run Code Online (Sandbox Code Playgroud)

java string stringbuilder

-1
推荐指数
1
解决办法
344
查看次数

如何在StringBuilder中添加空行?

这是一个众所周知的"问题":

sb.AppendLine();
Run Code Online (Sandbox Code Playgroud)

......不会添加一个空行,正如人们所预料(如讨论这里,例如).

但是,人们普遍认为这样可行:

sb.AppendLine(Environment.NewLine);
Run Code Online (Sandbox Code Playgroud)

......但它不适合我.我有这个代码:

for (int i = 0; i < listOfListItems.Count; i++)
{
    sb.AppendLine(Environment.NewLine);
    lc = listOfListItems[i];
    sb.AppendLine(String.Format(@"<p>Request date is {0}; Payee Name is {1}; Remit Address or Mail Stop is {2}; Last 4 of SSN or ITIN is {3}; 204 Submitted or on file is {4}; Requester Name is {5}; Dept or Div Name is {6}; Phone is {7}; Email is {8}</p>",
        lc.li_requestDate, lc.li_payeeName, lc.li_remitAddressOrMailStop, lc.li_last4SSNDigitsOrITIN, lc.li_204SubmittedOrOnFile, lc.li_requesterName, lc.li_deptDivName, lc.li_phone, lc.li_email));
}
Run Code Online (Sandbox Code Playgroud)

所有数据都被添加到StringBuilder,然后添加到生成的表单中,但列表项之间没有空格 - …

c# stringbuilder splistitem sharepoint-2010

-1
推荐指数
1
解决办法
2853
查看次数

如果我注释掉一个成员的构造函数调用,为什么我的程序不能工作?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication8
{
    class Test
    {
        public StringBuilder a;

        /*public Test()
        {
            a = new StringBuilder();
        } */
    }

    class Program
    {
        static void Main(string[] args)
        {
            Test testobj = new Test();
            testobj.a.Append("Hello");
            Console.WriteLine(testobj.a);
            Console.ReadLine();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Test Class的默认构造函数不应该为类中的每个文件调用每个默认构造函数吗?

c# stringbuilder constructor default-constructor

-1
推荐指数
1
解决办法
39
查看次数

为什么我对file.WriteLine()的调用无法将StringBuilder的所有内容写入文件?

我正在尝试通过StringBuilder和File.WriteLn()将一个html文件写入磁盘,但该文件缺少几行,因此无用.我的代码是:

    private void BuildAndWriteHTMLFile()
{
    StringBuilder sb = new StringBuilder();
    sb.Append("<!DOCTYPE html>");
    sb.Append("<html lang=\"en\">");
    sb.Append("<head>");
    sb.Append("<meta charset=\"utf-8\">");
    sb.Append("<title>Green Bay Packers 2013 Schedule (All times Central)</title>");
    sb.Append("<script src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js\"></script> ");
    sb.Append("<script src=\"http://maps.google.com/maps/api/js?sensor=false\"></script> ");
    sb.Append("<script src=\"gomap.js\"></script> ");
    sb.Append("<!--[if IE]>");
    sb.Append("<script src=\"http://html5shiv.googlecode.com/svn/trunk/html5.js\"></script>");
    sb.Append("<![endif]-->");

. . . // oodles on noodly code elided for lack of reason to leave it in

    sb.Append("this.singleMarker = false;");
    sb.Append("this.lockGeocode = false;");
    sb.Append("this.markers = [];");
    sb.Append("this.tmpMarkers = [];");
    sb.Append("this.geoMarkers = [];");
    sb.Append("},");

    sb.Append("isVisible: function(latlng) {");
    sb.Append("return this.map.getBounds().contains(latlng);");
    sb.Append("}");
    sb.Append("}");
    sb.Append("})(jQuery);"); …
Run Code Online (Sandbox Code Playgroud)

c# file-io stringbuilder streamwriter

-1
推荐指数
1
解决办法
144
查看次数

为什么我转换的字符串会继续追加

我正在尝试创建一个随机生成的字符串.问题是,按照我设置的方式,它继续添加到自身.

我的代码(我从另一个类调用了很多静态变量,所以不要担心那部分)

    class Generate1 extends Thread{
    @Override
    public void run() {
        while(RUNNING == true){
                generate();
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    private void generate(){
        for(int i=0;i<length;i++){
            int decider = rando.nextInt(6)+1;

            if(decider == 1){
                sb1.append("A");
            }
            if(decider == 2){
                sb1.append("B");
            }
            if(decider == 3){
                sb1.append("C");
            }
            if(decider == 4){
                sb1.append("D");
            }
            if(decider == 5){
                sb1.append("E");
            }
            if(decider == 6){
                sb1.append("F");
            }
        }
        Log.d("PSS",sb1.toString()); // this here is the stringbuilder being outputted 
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我将长度设置为2,在我的日志中它看起来像:

DF …

java string stringbuilder loops

-1
推荐指数
1
解决办法
26
查看次数