我试图用LINQ 将项目附加List<string>到a中StringBuilder:
items.Select(i => sb.Append(i + ","));
Run Code Online (Sandbox Code Playgroud)
我发现了一个类似的问题在这里这解释了为何上述不工作,但我无法找到Each的ForEach或任何类似的List,我可以改用.
有没有一种巧妙的方法在一个班轮中这样做?
在应用程序中,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) 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)
我想把"名字"变成粗体.有可能吗?
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来提供很多很多关于如何格式化的选项,但是我没有看到任何方法告诉它不格式化/改变/改变数据的值.
我正在调整我在这里找到的一些代码: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自动执行的操作.
我看到现有代码中的字符串用法有多个连接.声纳代码覆盖率建议使用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)
用新字符串覆盖整个现有字符串.但它不可用.
我需要一些帮助.我正在使用带有异常详细信息的文本文件编写错误日志.有了这个我想要我的堆栈跟踪细节写如下,而不是直线,以避免用户滚动记事本的滚动条或让我们说在第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) 我一直在创建动态字符串以附加到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) 我想知道是否还有像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) 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()?
stringbuilder ×10
c# ×6
java ×4
string ×3
.net ×2
append ×2
asp.net ×1
iterator ×1
list ×1
overwrite ×1
performance ×1
refactoring ×1
regex ×1
replace ×1
toupper ×1