我做了一个性能测试
String test="";
Date st = new Date();
logger.info("start "+(new Date()).toString());
for(int i = 0;i<100000;i++) {
test += "test";
}
logger.info("end "+(new Date()).toString());
test="";
StringBuilder sb = new StringBuilder(test);
logger.info("start Sb "+(new Date()).toString());
for(int i = 0;i<100000;i++) {
sb.append("test");
}
test = sb.toString();
logger.info("end sb "+(new Date()).toString());
Run Code Online (Sandbox Code Playgroud)
结果是
start Fri Jun 30 10:34:42 KRAT 2017
end Fri Jun 30 10:34:55 KRAT 2017
start Sb Fri Jun 30 10:34:55 KRAT 2017
end sb Fri Jun 30 10:34:55 KRAT 2017
Run Code Online (Sandbox Code Playgroud)
相差13秒!!!
但我到处都看到“+”运算符更快的标语,因为从 …
我试图仅从第一个和第二个索引中删除每个“x”(无论大小写),但我的程序仅删除第一个索引的字母,然后循环而不删除第二个索引。
Scanner userIn = new Scanner(System.in);
StringBuilder str = new StringBuilder();
str.append(userIn.nextLine());
for(int i = 0; i<2; i++) {
if((str.charAt(i) == 'x') || (str.charAt(i) == 'X')) {
str = str.deleteCharAt(i);
}
}
System.out.println(str);
Run Code Online (Sandbox Code Playgroud) 我有一个旧的 C# 应用程序,用于StringBuilder.AppendLine添加带有字符串的行,然后计算字符串的校验和。到目前为止,它始终在 Windows 桌面/Windows CE 上运行,因此行结尾始终为\r\n。
现在我需要让它在 linux/mono 上同样工作。但随后AppendLine仅添加 a\n而不是 a \r\n。
所以我必须向 stringbuilder 添加与 Windows 上相同的行结尾。但如何呢?
s.Append("\r\n");
Run Code Online (Sandbox Code Playgroud)
似乎不起作用。
s.Append(13);
s.Append(10);
Run Code Online (Sandbox Code Playgroud)
也不做这项工作。
String s = "apples for you";
StringBuilder returnString = new StringBuilder("");
Arrays.stream(s.split(" "))
.reduce(returnString, (acc, str) -> acc.append(str.charAt(0)));
Run Code Online (Sandbox Code Playgroud)
预期输出每个单词的第一个字母,即afy。
但在acc.append,处出现错误acc被视为 a String。
我有一个服务方法,它接受一个String,然后用标签库中的项替换String中的标签.如下:
for( MetaDataDTO tag : tagValues )
{
message = message.replace( tag.getKey(), tag.getText1() );
}
Run Code Online (Sandbox Code Playgroud)
明显; 这使得大量的新字符串变得糟透了.但StringBuilder替换方法很难用于一个字符串中的多个字符串.如何使我的方法更有效?
它用于文本块,例如:
亲爱的#firstName#,#applicationType#的申请已被#approvedRejected#sorry.
其中#firstName#等是元数据数据库中的键.标签也可能不被散列字符包围.
我在VB.NET中为StringBuilder写了一个扩展来添加一个AppendFormattedLine方法(所以我不必使用其中一个参数来换行符号):
Imports System.Runtime.CompilerServices
Public Module sbExtension
<Extension()> _
Public Sub AppendFormattedLine(ByVal oStr As System.Text.StringBuilder, _
ByVal format As String, _
ByVal arg0 As Object)
oStr.AppendFormat(format, arg0).Append(ControlChars.NewLine)
End Sub
<Extension()> _
Public Sub AppendFormattedLine(ByVal oStr As System.Text.StringBuilder, _
ByVal format As String, ByVal arg0 As Object, _
ByVal arg1 As Object)
oStr.AppendFormat(format, arg0, arg1).Append(ControlChars.NewLine)
End Sub
<Extension()> _
Public Sub AppendFormattedLine(ByVal oStr As System.Text.StringBuilder, _
ByVal format As String, _
ByVal arg0 As Object, _
ByVal arg1 As Object, …Run Code Online (Sandbox Code Playgroud) //will need these in a second
string a = "5";
string b = "7";
string c = "3";
Run Code Online (Sandbox Code Playgroud)
所以因为C#会在内存中分配更多的字符串
string mystring = "";
mystring += a;
mystring += b;
mystring += c;
Run Code Online (Sandbox Code Playgroud)
会慢得多
StringBuilder sb = new StringBuilder();
sb.Append(a).Append(b).Append(c);
Run Code Online (Sandbox Code Playgroud)
那么,那么:
string mystring = "";
mystring += a + b + c;
Run Code Online (Sandbox Code Playgroud)
它只是+=缓慢的部分,或者+也是罪魁祸首?
在我看来,我循环遍历我的模型并构建html以显示在页面上.我正在用stringbuilder和if/else条件构建这个html.
我试图将此字符串渲染为html但我一直卡住了.
这是代码:
@model UserManager.Models.vw_UserManager_Model
<div id="success-message">
<fieldset>
<legend><b>@ViewData["Action"]</b> </legend>
<!-- User created -->
<div id="content">
@Html.Raw("some test string");
@{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
int i = 0;
sb.Append("<ul>");
foreach (var item in Model)
{
string s = item.ToString();
if (s == "," && i != 1)
{
// When it finds first delimiter, start building the string
i = 1;
sb.Append("<li>");
}
else if (s == "," && i == 1)
{
// When it finds first delimiter, …Run Code Online (Sandbox Code Playgroud) 将List值附加为String时出现一个问题.我将在列表中获得1或超过1的值.然后我需要将这些字符串作为一个字符串追加并为每个字符串使用一个分隔符.但最后还有逗号添加.如何动态地在字符串的末尾删除它.这是我的代码:
cntList = parseXml(metadata.xml);
if (cntList.size() != 0) {
// entryCountryMap.put(id, country);
System.out.println("Size is ---->" + cntList.size());
StringBuilder sb = new StringBuilder();
if (cntList.size() >= 2) {
for (String s : cntList) {
sb.append(s);
sb.append(",");
}
}
System.out.println("StringBuilder ----->" + sb.toString());
}
Run Code Online (Sandbox Code Playgroud)
我的输出是这样的:
StringBuilder ----->All Countries,US - United States,
Run Code Online (Sandbox Code Playgroud)
请帮我解决这个问题.谢谢 - 拉吉
stringbuilder ×10
java ×5
c# ×4
string ×3
.net ×1
arraylist ×1
asp.net ×1
html ×1
java-8 ×1
java-stream ×1
line-endings ×1
performance ×1
replace ×1
vb.net ×1
view ×1