标签: stringbuilder

.NET的StringBuilder是否是线程安全的

MSDN文档的常规"线程安全"部分,用于StringBuilder说明:

...任何实例成员都不保证是线程安全的......

但是这个陈述感觉它已被复制并粘贴到框架中的几乎每个类:

http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx

但是,Gavin Pugh的这些博客文章提到了以下的线程安全行为StringBuilder:

http://www.gavpugh.com/2010/03/23/xnac-stringbuilder-to-string-with-no-garbage/

http://www.gavpugh.com/2010/04/01/xnac-avoiding-garbage-when-working-with-stringbuilder/

此外,Reflector揭示的StringBuilder的源代码以及SSCLI源代码中的相应注释也提出了许多实现注意事项以确保线程安全性:

http://labs.developerfusion.co.uk/SourceViewer/browse.aspx?assembly=SSCLI&namespace=System.Text&type=StringBuilder

有没有人更深入地了解一个StringBuilder实例是否可以安全地在多个并发线程之间共享?

.net stringbuilder thread-safety

30
推荐指数
2
解决办法
1万
查看次数

将字符串中的首字母大写

我在将字符串中的第一个字母转换为Capital时遇到问题:

rackingSystem.toLowerCase(); // has capitals in every word, so first convert all to lower case
StringBuilder rackingSystemSb = new StringBuilder();
rackingSystemSb.append(rackingSystem);
rackingSystemSb.setCharAt(0, Character.toUpperCase(rackingSystemSb.charAt(0))); 
rackingSystem = rackingSystemSb.toString();
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用..

有什么建议?

java stringbuilder capitalize

30
推荐指数
2
解决办法
3万
查看次数

StringBuilder追加()和null值

我有一个Strings 列表,我想用它们之间的空格连接起来.所以我正在使用StringBuilder.现在,如果有任何Strings null,它们将被StringBuilder字面上存储为"null".这是一个小程序来说明问题:

public static void main(String ss[]) {
    StringBuilder sb = new StringBuilder();

    String s;
    s = null;

    System.out.println(sb.append("Value: ").append(s));
}
Run Code Online (Sandbox Code Playgroud)

我希望输出为"Value:",但它出现为"Value:null"

有没有解决这个问题的方法?

java null stringbuilder append

29
推荐指数
4
解决办法
7万
查看次数

StringBuilder.Replace()比String.Replace更有效吗?

如果必须使用String.Replace()替换测试50次,则基本上必须创建一个新字符串50次.StringBuilder.Replace()是否更有效地执行此操作?例如,如果我要替换大量文本,我是否应该使用StringBuilder,即使我不会向其添加任何数据?

我正在使用.NET,但我认为这与Java和其他语言可能相同.

.net string stringbuilder

28
推荐指数
3
解决办法
1万
查看次数

强制StreamWriter更改编码

我正在尝试使用DialogResult和保存文件StringBuilder.在制作文本后,我调用以下代码来保存文件:

    if (dr == DialogResult.OK)
    {

        StreamWriter sw = new StreamWriter(saveFileDialog1.FileName);

        sw.Write(sb.ToString());
        sw.Close();
    }
Run Code Online (Sandbox Code Playgroud)

我试图将第二个参数添加到StreamWriteras,Encoding.UTF8但由于第一个参数是a string而不是a Stream,因此它不会编译它.

如何将该字符串转换为流,以便能够将第二个参数作为编码传递?

这样做的原因,是在我的文字是什么地方我有µ,但是当文件被保存它显示像μ这样µ越来越screwd!

谢谢

c# stringbuilder streamwriter

28
推荐指数
2
解决办法
8万
查看次数

StringBuilder.ToString()抛出'索引超出范围'异常

我真的很感谢有人帮我解决以下问题:

我现在得到以下异常:

指数超出范围.必须是非负数且小于集合的大小.参数名称:chunkLength

stringBuilder.ToString().

奇怪的是,如果我放入stringBuilder.ToString()手表,它的效果非常好.

c# stringbuilder exception tostring

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

在F#中使用StringBuilder是正确的吗?

StringBuiler是一个可变对象,F#鼓励尽可能多地使用不变性.所以应该使用转换而不是变异.在F#中构建字符串时,这是否适用于StringBuilder?有一个F#immutable替代它吗?如果是这样,这种替代方案是否有效?

一个片段

stringbuilder f# immutability

28
推荐指数
2
解决办法
4800
查看次数

字符串生成器与字符串连接

使用字符串生成器而不是纯字符串连接有什么好处和权衡?

new StringBuilder(32).append(str1)
                     .append(" test: ")
                     .append(val)
                     .append(" is changed")
                     .toString();
Run Code Online (Sandbox Code Playgroud)

vs说

str1 + " test: " + val + " is changed".
Run Code Online (Sandbox Code Playgroud)

str1是一个随机的10个字符串. str2是一个随机的8个字符串.

java stringbuilder string-concatenation

27
推荐指数
2
解决办法
2万
查看次数

StringBuilder Append(string ...)函数的返回值有什么用?

StringBuilder的Append(字符串s)函数(和类似函数)的完整语法是

StringBuilder myStringBuilder.Append(string myString)
Run Code Online (Sandbox Code Playgroud)

既然myStringBuilder.Append(string myString)已经添加了字符串myStringBuilder,我想知道返回值是什么?我从未见过任何使用返回值的示例代码.

根据msdn,它不会返回一个新StringBuilder实例,而是返回对当前构建器本身的引用(即可能myStringBuilder).我只是想不到一个场景,当使用返回值有意义时,他们为什么不做返回类型void

c# stringbuilder

27
推荐指数
2
解决办法
1511
查看次数

什么时候引入Javac StringBuilder/StringBuffer优化?

我知道Javac编译器能够+使用StringBuilder/ 来转换字符串连接StringBuffer,并且我很想知道从哪个版本引入了这个更改?

我正在使用此示例代码:

public class Main {
  public static void main(String[] args) {
      String a = args[0];
      String s = "a";
      s = s + a;
      s = s + "b";
      s = s + "c";
      s = s + "d";
      s = s + "e";
      System.out.println(s);
  }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经试过javac 1.8.0_121,javac 1.6.0_20,javac 1.5.0_22java 1.4.2_19.

这里是字节码我看到使用的样本javap -c来自1.4.2_19:

6:  astore_2
7:  new …
Run Code Online (Sandbox Code Playgroud)

java stringbuilder javac stringbuffer jdk1.4

27
推荐指数
4
解决办法
2732
查看次数