标签: stringbuilder

将List项附加到StringBuilder

我试图用LINQ 将项目附加List<string>到a中StringBuilder:

items.Select(i => sb.Append(i + ","));
Run Code Online (Sandbox Code Playgroud)

我发现了一个类似的问题在这里这解释了为何上述不工作,但我无法找到EachForEach或任何类似的List,我可以改用.

有没有一种巧妙的方法在一个班轮中这样做?

.net c# stringbuilder iterator list

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

我们何时应该将String更改为Stringbuilder?

在应用程序中,String是常用的数据类型.我们所知道的是,String的变异会占用大量内存.所以我们可以做的是使用StringBuilder/StringBuffer.

但是我们应该在什么时候改为StringBuilder?
当我们必须拆分它或在那里重新塑造角色时,我们应该怎么做?

例如:

 //original:
 String[] split = string.split("?");  
 //better? :  
 String[] split = stringBuilder.toString().split("?);
Run Code Online (Sandbox Code Playgroud)

要么

 //original:
 String replacedString = string.replace("l","st");  
 //better? :  
 String replacedString = stringBuilder.toString().replace("l","st");  
 //or  
 StringBuilder replacedStringBuilder = new StringBuilder(stringBuilder.toString().replace("l","st);
Run Code Online (Sandbox Code Playgroud)

java string stringbuilder refactoring memory-management

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

如何使Stringbuilder内容的一部分变粗?

StringBuilder sb = new StringBuilder();
sb.Append(
        string.Format("{0} |{1} ", Name, Value)
        );
Display.Text = sb.ToString();  // Display is a WP7 TextBlock control 
Run Code Online (Sandbox Code Playgroud)

我想把"名字"变成粗体.有可能吗?

c# stringbuilder windows-phone-7

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

StringBuilder追加没有格式化的字节

DateTime todayDateTime = DateTime.Now;
StringBuilder todayDateTimeSB = new StringBuilder("0");
todayDateTimeSB.Append(todayDateTime.ToString("MMddyyyy"));
long todayDateTimeLongValue = Convert.ToInt64(todayDateTimeSB.ToString());
// convert to byte array packed decimal
byte[] packedDecValue = ToComp3UsingStrings(todayDateTimeLongValue); 
// append each byte to the string builder
foreach (byte b in packedDecValue)
{
    sb.Append(b); // bytes 56-60
}
sb.Append(' ', 37);
Run Code Online (Sandbox Code Playgroud)

上面的代码获取当前日期时间,将其格式化为long值并将其传递给将其转换为压缩十进制格式的方法.我知道上面的工作是因为当我逐步执行代码时,字节数组对于我期望的所有字节都具有正确的十六进制值.

但是上面是我遇到问题的代码,特别是我已经研究过,发现字符串生成器.Append(byte)实际上ToString()为该字节做了一个.当它将字节添加到字符串时,这会改变字节的值.问题是我如何告诉StringBuilder它按原样取出'byte'并将其存储在内存中而不格式化/改变值.我知道还有一个.AppendFormat()有几个重载使用它IFormatProvider来提供很多很多关于如何格式化的选项,但是我没有看到任何方法告诉它不格式化/改变/改变数据的值.

c# stringbuilder iformatprovider

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

当我使用StringBuilder.Append而不是.AppendLine时,我是否需要添加额外的.Append(crlf)s?

我正在调整我在这里找到的一些代码:http://nicholas.piasecki.name/blog/2009/03/sending-raw-epl2-directly-to-a-zebra-lp2844-via-c/#comment-1636,但在VS 2003/.NET 1.1中,StringBuilder的AppendLine方法无法识别,因此我将其截断为.Append.

现在我需要在每次调用Append之后添加#13#10左右 - 我假设这是AppendLine自动执行的操作.

.net c# stringbuilder append visual-studio

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

StringBuilder - 完全替换现有字符串.任何方法?

我看到现有代码中的字符串用法有多个连接.声纳代码覆盖率建议使用StringBuilder.我正在更新代码以使用StringBuilder.但我想知道如何使用新字符串有效地覆盖现有内容.

在字符串表示中,如下所示:

String query = "select...";
if ( x ) {
    query = "select xyz...";
}
Run Code Online (Sandbox Code Playgroud)

使用StringBuilder,我使用了这个:

 StringBuilder query = new StringBuilder("select...");
 if ( x ) {
     // I need to overwrite the existing stringbuilder content here
     query = new StringBuilder("Select xyz..");
        //or
     query = query.replace(,,,);
        //or
     //Anything better
 }
Run Code Online (Sandbox Code Playgroud)

我希望有一个方法,如:

 query.replace("new string");
Run Code Online (Sandbox Code Playgroud)

用新字符串覆盖整个现有字符串.但它不可用.

java string stringbuilder replace overwrite

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

在某些字符计数后拆分字符串

我需要一些帮助.我正在使用带有异常详细信息的文本文件编写错误日志.有了这个我想要我的堆栈跟踪细节写如下,而不是直线,以避免用户滚动记事本的滚动条或让我们说在第100个字符,字符串将写入下一行.我不知道如何实现这一目标.提前致谢.

样品(这是我目前的直线输出)

STACKTRACE:

at stacktraceabcdefghijklmnopqrstuvwxyztacktraceabcdefghijklmnopqrswxyztacktraceabcdefghijk
Run Code Online (Sandbox Code Playgroud)

**我想要的输出(字符串将在特定字符数后写入下一行)

STACKTRACE:

at stacktraceabcdefghijklmno    
pqrstuvwxyztacktraceabcdefgh    
ijklmnopqrswxyztacktraceabcd    
efghijk
Run Code Online (Sandbox Code Playgroud)

我的代码

builder.Append(String.Format("STACKTRACE:"));
            builder.AppendLine();
            builder.Append(logDetails.StackTrace);  
Run Code Online (Sandbox Code Playgroud)

c# regex asp.net string stringbuilder

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

AppendFormat()或AppendLine()是更安全/更时尚的解决方案吗?

我一直在创建动态字符串以附加到StringBuilder,如下所示:

StringBuilder sb = new StringBuilder();
string bla = "bla";
sb.AppendLine(string.Format("android:id=\"@+id/{0}\" ", bla));
Run Code Online (Sandbox Code Playgroud)

...但后来我注意到StringBuilder有一个AppendFormat()方法,它避免了" string.Format() ".所以我想知道AppendFormat()是否也像AppendLine()那样添加换行符(而不是Append(),而不是).

IOW,达到同样的效果:

sb.AppendLine(string.Format("android:id=\"@+id/{0}\" ", bla));
Run Code Online (Sandbox Code Playgroud)

...当使用AppendFormat()时,我需要使用两行,如下所示:

sb.AppendFormat("android:id=\"@+id/{0}\" ", bla);
sb.AppendLine();
Run Code Online (Sandbox Code Playgroud)

答案是肯定的 - 需要两行,或者我必须在对AppendLine()的调用中恢复显式使用string.Format().

实际上,至少有一种方法可以用AppendFormat()在一行中完成,即:

sb.AppendFormat("android:id=\"@+id/{0}\" {1}", bla, Environment.NewLine);
Run Code Online (Sandbox Code Playgroud)

...但是,这可能不比AppendLine(string.Format(...)更优雅

那么以下哪一项更好(更高性能)或更安全,或者无关紧要?

sb.AppendFormat("android:id=\"@+id/{0}\" {1}", bla, Environment.NewLine);
sb.AppendLine(string.Format("android:id=\"@+id/{0}\" ", bla));
Run Code Online (Sandbox Code Playgroud)

c# performance stringbuilder string.format append

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

将stringBuilder强制为大写

我想知道是否还有像StringBuilder的toUpperCase这样的东西?下面是我的代码,我正在尝试用户输入一个短语并将其转换为首字母缩略词.有人通过建议StringBuilder帮助我,但我无法弄清楚是否有办法使首字母缩写大写.任何帮助是极大的赞赏.

public class ThreeLetterAcronym {

public static void main(String[] args) {
    String threeWords;
    int count = 0;
    int MAX = 3;
    char c;
    //create stringbuilder
    StringBuilder acronym = new StringBuilder();

    Scanner scan = new Scanner(System.in);

    //get user input for phrase
    System.out.println("Enter your three words: ");
    threeWords = scan.nextLine();

    //create an array to split phrase into seperate words.
    String[] threeWordsArray = threeWords.split(" ");

    //loop through user input and grab first char of each word.
    for(String word : threeWordsArray) {
        if(count < …
Run Code Online (Sandbox Code Playgroud)

java stringbuilder toupper

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

Java - 在线程中的while循环后无法访问StringBuilder

class myThread extends Thread {

myThread(Socket socket) {
    Scanner sc = new Scanner(socket);
}

public void run() {
    StringBuilder sb = new StringBuilder();
    try {
        while(sc.hasNext()) {
            sb.append(sc.next());
            sb.append(" ");
        }
        System.out.println(sb.toString());      

    } catch (Exception e) {
        System.out.println(e);      
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码不输出任何内容.但是,如果我移入System.out.println(sb.toString());while循环,它会.我不知道为什么会这样,但我需要在while循环完成后首先输出代码.

在while循环完成后,如何打印StringBuilder.toString()?

java stringbuilder multithreading

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