标签: stringbuilder

.NET字符串和引用类型参数

以下代码如何工作?

public void SomeMethod()
{
    StringBuilder sb = new StringBuilder();
    AppendFoo(sb);
    String foo = sb.ToString(); // foo is "foo"

    String s = String.Empty;
    AppendBar(s);
    String bar = s; // bar is empty 
}

public void AppendFoo(StringBuilder x)
{
    x.Append("Foo");
}

public void AppendBar(String x)
{
    x = x + "Bar";
}
Run Code Online (Sandbox Code Playgroud)

如果同时StringBuilderString被引用类型,为什么字符串对象未通过时,它通过改变AppendBar方法,而路过的时候就到StringBuilder对象被改变AppendFoo的方法,因为这两个参数的方法正在引用类型作为参数?

.net c# string stringbuilder reference-type

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

字符串和字符串生成器

.NET中的字符串和字符串构建器有什么区别?

.net string stringbuilder

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

有效使用StringBuilder

我需要为数据表中的每一行附加一个Sqlquery.我有36列,并根据每列的数据类型我需要附加sqlquery.任何人都建议我这样做的有效方法.这是编码使用的坏方法"+"运算符在追加之间追加文本?

Following is my code.

 query ="INSERT INTO MASTERPI (tag,instrumenttag)");
 query += "VALUES ('" + createTagRow["tag"].ToString() + "','" + createTagRow["instrumenttag"].ToString() + "'");
Run Code Online (Sandbox Code Playgroud)

谢谢,Vix

c# stringbuilder

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

使用StringBuilder与XmlDocument或创建XML文档相关的优点是什么?

这可能有点代码味道,但我看到它是一些生产代码,即在创建XML文档时使用StringBuilder而不是XmlDocument.在某些情况下,这些是一次写入操作(例如,创建文档并将其保存到磁盘),而其他人正在将构建的字符串传递给XmlDocument,以将XslTransform预先形成为返回给客户端的文档.

如此明显的问题:以这种方式做事是否有价值,是否应该根据具体情况进行,或者这是错误的做事方式?

.net xml stringbuilder xmldocument

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

从StringBuilder转换为toString的Java替代方案

我有这段代码将StringBuilders的ArrayList转换为字符串的ArrayList:

码:

public ArrayList<String> convGenSeqToString(ArrayList<StringBuilder> buff){
        ArrayList<String> convBuf = new ArrayList<String>();

        for (StringBuilder xVar: buff){
            convBuf.add(xVar.toString());
        }
        return convBuf;
    }
Run Code Online (Sandbox Code Playgroud)

我的代码适用于15-20MB文本文件的文件.但是我有一个44MB的文本文件,每当我用该文本文件运行我的程序时,我总是会收到此错误.

错误:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:2746)
    at java.util.ArrayList.ensureCapacity(ArrayList.java:187)
    at java.util.ArrayList.add(ArrayList.java:378)
    at Recognition.convGenSeqToString(Recognition.java:157)
    at Recognition.genSeq(Recognition.java:145)
    at Recognition.Recognitions(Recognition.java:96)
    at ChainDetection.main(Detection.java:25)
Run Code Online (Sandbox Code Playgroud)

我已经使用-Xmx2048M增加了JVM运行配置中的内存,但仍然存在相同的错误.我将错误指向上面显示的代码并突出显示以下行:

convBuf.add(xVar.toString());
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以将StringBuilder转换为字符串而不使用该.toString()方法?我在其他论坛中看到过,他们也为toString创建了自定义类,但我还不熟悉泛型和一些"@"关键字.任何人都有如何解决这个问题的建议或指导?

编辑

我根据vanza的建议编辑了我的代码,它是:

public ArrayList<String> convGenSeqToString(ArrayList<StringBuilder> buff){
        ArrayList<String> convBuf = new ArrayList<String>(buff.size());
        Iterator <StringBuilder> iterBuf = buff.iterator();

        while (iterBuf.hasNext()){
            StringBuilder x = iterBuf.next();
            convBuf.add(x.toString());
            iterBuf.remove();
        }
        return convBuf;
    }
Run Code Online (Sandbox Code Playgroud)

错误信息:

Exception in …
Run Code Online (Sandbox Code Playgroud)

java memory string stringbuilder

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

Java将StringBuilder转换为CharBuffer

我需要StringBuilder sb使用CharBuffer 发送一些内容
我正在跳过类似CharBuffer.wrap( sb)但却无法找到任何优雅的方式

在解决暴力之前,是否有一种巧妙的方法将StringBuilder转换为CharBuffer?

java stringbuilder type-conversion

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

通过循环遍历列表创建新的StringBuilder,删除最后一个元素

我知道这可能是一个不好的例子,但我在这种情况下的问题更多地与处理StringBuilder而不是我的SQL查询本身的最好/最有效的方法有关,所以请耐心等待...

作为一个示例来展示我想要实现的目标,假设我在数据库中有一个很大的表列表,所有表都具有相同的结构,我想创建一个查询来从一个单独的数据中提取数据查询.

我想这样做的方式是:

    Dim MyTables As List(Of String) = {"Table1", "Table2", "Table3" ... "TableN"}.ToList
    Dim SQLQuery As New StringBuilder

    For Each tbl As String In MyTables
        SQLQuery.AppendLine("SELECT [col1], [col2], [col3] FROM " & tbl)
        SQLQuery.AppendLine("UNION")
    Next
Run Code Online (Sandbox Code Playgroud)

再次,忽略这是否是最好的方法(尽管我很想知道是否有更好的方法,但我不希望答案在这个方向上倾斜 - 我更感兴趣的是如何知道如何在这种情况下有效地处理StringBuilder).

鉴于我这样做的方式,我的StringBuilder将UNION & vbCrLf在我需要删除的末尾有一个额外的 - 我知道我可以使用以下内容:

SQLQuery.Remove(SQLQuery.Length - ("UNION" & vbCrLf).Length, ("UNION" & vbCrLf).Length)
Run Code Online (Sandbox Code Playgroud)

当然,我可以提高效率,但我的问题基本上是使用循环创建这样一个字符串构建器的最佳/最有效的方法,其中"连接器"是一个相当大的字符串,它将是如果你按照我的方式做到了最后?

我知道这个问题是用VB编写的,但我同样对C#中的答案感到满意.谢谢!!!

.net c# vb.net stringbuilder

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

如何确保在多线程环境中对StringBuilder对象进行GC操作?(鉴于我不能使用使用关键字)?

编辑: - 如何确保StringBuilder在多线程环境中对象是GC?(鉴于我不能使用使用关键字)?

我正在使用StringBuilder多个线程,并StringBuilder为每个被调用的线程创建一个新实例.

我关注的是性能,特别是它为StringBuilder创建这么多实例所占用的内存.

有没有其他方法可以确保GC为我释放内存?(比如调用Dispose等)

编辑:StringBuilder没有实现IDisposable,所以我不能使用using关键字.

编辑:我不想强迫,GC.Collect()因为有多个线程同时运行,他们在它们之间共享资源.其中一些线程处于休眠状态,只是监听事件再次变为活动状态.

c# stringbuilder multithreading garbage-collection using

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

Stringbuilder无法追加空格?

import java.util.StringTokenizer;

public class ReverseWords {
    public static void main(String[] args) {
        StringBuilder output = new StringBuilder();
        String str = "This is String , split by StringTokenizer, created by mkyong";
        StringTokenizer st = new StringTokenizer(str);
                char space =' ';
        System.out.println("---- Split by space ------");
        while (st.hasMoreElements()) {
            //System.out.println(st.nextElement());
                     output.insert(0,st.nextElement());
                     output.append(" ");
        }

        System.out.println(output.toString());
        /*System.out.println("---- Split by comma ',' ------");
        StringTokenizer st2 = new StringTokenizer(str, ",");

        while (st2.hasMoreElements()) {
            System.out.println(st2.nextElement());
        }*/
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图反转一个字符串的单词,这是我得到的:

mkyongbycreatedStringTokenizer,bysplit,StringisThis
Run Code Online (Sandbox Code Playgroud)

java stringbuilder

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

C#StringBuilder AppendFormat抛出System.FormatException

我有这个方法,我已经简化了重现问题,任何人都可以解释为什么抛出系统格式异常?

我已经尝试将@添加到格式字符串的开头,以防万一它是转义字符的问题,但它没有帮助.

private void doThing(StringBuilder builder, string inPrimaryKey) {
    // At this point the builder.ToString() results in "            <div  class="v-group width-100 shadowed OrderPanel"
    // and inPrimaryKey is "OrderId"

    // Throws System.FormatException with the detail "Input string was not in a correct format."
    builder.AppendFormat(@" @if (Model.{0} > 0) { <text>StateNonEditable</text> } else { <text>StateEditable</text> }", inPrimaryKey);
}
Run Code Online (Sandbox Code Playgroud)

有点背景,我们使用这段代码生成一个cshtml页面供web应用程序使用,所以stringbuilder最初包含一些html,然后我们在格式部分添加了一些C#MVC Razor.

c# stringbuilder razor

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