这是我的代码行:
StringBuilder myCompleteMessage = new StringBuilder();
myCompleteMessage.Capacity = Int32.MaxValue-1;
Run Code Online (Sandbox Code Playgroud)
尝试过:
myCompleteMessage.Capacity = myCompleteMessage.MaxCapacity-1;
Run Code Online (Sandbox Code Playgroud)
我在第2行得到例外.
Exception of type 'System.OutOfMemoryException' was thrown.
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
at System.String.GetStringForStringBuilder(String value, Int32 startIndex, Int32 length, Int32 capacity)
at System.Text.StringBuilder.set_Capacity(Int32 value)
at Orca.Server.HandleClientComm(Object newClient) in C:\Users\Dan\Documents\Visual Studio 2010\Projects\msig\Orca\Server.cs:line 100
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart(Object obj)
Run Code Online (Sandbox Code Playgroud) 我正在编写专门用于Office 365的PowerShell应用程序,但我遇到了一个问题.
var result = pipeline.Invoke();
// close the runspace
runspace.Close();
// convert the script result into a single string
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendLine("<----------------Results---------------->");
foreach (var item in result)
{
stringBuilder.AppendLine(item.ToString());
}
Run Code Online (Sandbox Code Playgroud)
现在,一切都很好,直到我得到我的结果.问题是,如果我收到这样的回复:
UserPrincipalName DisplayName isLicensed
----------------- ----------- ----------
johnsonadmin@johnsoncom... Jack M***** False
Run Code Online (Sandbox Code Playgroud)
如果我在Powershell中运行相同的命令,我会得到相同的结果,但有一些更有条理的格式.它实际上会给我整个电子邮件地址,而不是说"johnsonadmin @ johnsoncom ...".
我认为这可能是集合自动格式化我的字符串的问题,但我不确定.当我试图解析电子邮件地址的文本时,这成为一个巨大的问题;)
任何帮助,将不胜感激!!
谢谢!
我编写了一个控制台应用程序来从Web服务器获取一些信息,将其转换为XML并保存.我手动创建了XML(使用附加字符串StringBuilder).因为XML可能非常大,就内存而言,使用StringBuilder或XMLDocument类等更好吗?确切地说,我的问题是,如果XML就像10mb文本那么使用内存有效StringBuilder.append("")还是System.XML命名空间?
我认为更有效的方法是使用StringBuilder,但在每次迭代后将XML保存到HD上的文件并清除stringbuilder对象.任何意见?提前致谢.:)
我遇到了两个代码片段,它们创建了一个要进一步执行的查询:
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("SELECT * FROM EMPLOYEE ");
stringBuilder.append("WHERE SALARY > ? ");
stringBuilder.append("GROUP BY DEPT");
Run Code Online (Sandbox Code Playgroud)
和
String string = "SELECT * FROM EMPLOYEE " +
"WHERE SALARY > ? " +
"GROUP BY DEPT";
Run Code Online (Sandbox Code Playgroud)
根据我的分析,两个片段都创建了4个对象.第一个片段创建一个StringBuilder对象和3个字符串对象,而第二个片段创建4个String对象.我的分析是否正确?
代码片段如何比代码片段2更有效?
我正在编写一个程序来计算:
1 ^ 1 + 2 ^ 2 + 3 ^ 3 + ... + 1000 ^ 1000 =?
一旦计算完毕,我想删除除最后十位数之外的答案中的所有数字,然后在屏幕上打印最后十位数字.但是,要删除我使用该StringBuilder.deleteCharAt()方法的所有其他数字,这会导致一些问题.我在下面提供了我的代码:
import java.math.BigInteger;
public class problemFourtyEight {
public static void main(String [] args) {
BigInteger answer = new BigInteger(""+0);
for(int i = 0; i <= 1000; i++) {
BigInteger temp = new BigInteger(""+i);
temp = temp.pow(i);
answer = answer.add(temp);
}
System.out.println(answer.toString().length());
StringBuilder sb = new StringBuilder((answer.toString()));
for(int k = 0; k <= (answer.toString().length() - 10); k++) {
sb.deleteCharAt(k); //Line …Run Code Online (Sandbox Code Playgroud) 如果您在"性能问题"标题下启用所有检查,则会收到有关以下代码的警告(如标题中所示):
StringBuilder sb = new StringBuilder("Two");
String s = "One" + sb.toString();
Run Code Online (Sandbox Code Playgroud)
我意识到这toString()是不必要的,但它在哪个方面是性能问题?
制作一个不可变对象是个坏主意Cloneable.这就是为什么 String不能克隆.不可变BigInteger并且BigDecimal也没有 Cloneable.
但是无法克隆可变的StringBuilder和StringBuffer!
这种决定背后的原因是什么?
是的,我可以使用"复制构造函数",new StringBuilder(CharSequence seq)但提供复制构造函数和禁止克隆的设计原则/推理是什么?
我试图了解reduce()方法如何与并行流完全配合,但我不明白为什么以下代码不返回这些字符串的串联。
这是代码:
public class App {
public static void main(String[] args) {
String[] grades = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"};
StringBuilder concat = Arrays.stream(grades).parallel()
.reduce(new StringBuilder(),
(sb, s) -> sb.append(s),
(sb1, sb2) -> sb1.append(sb2));
System.out.println(concat);
}
}
Run Code Online (Sandbox Code Playgroud)
该代码仅适用于顺序流,但对于并行流,它不会返回串联。每次输出都不一样。有人可以解释一下那里发生了什么吗?
此 Scala 代码在 Scala 2.13 下编译
val res = new scala.collection.mutable.StringBuilder
"hello".foreach { c =>
if (true) {
(0 until 10).foreach( res += c )
}
}
Run Code Online (Sandbox Code Playgroud)
如果您看到该foreach方法缺少匿名函数的参数。当它被执行时,它给出了一个令人费解的异常StringIndexOutOfBoundsException,res += c因为它StringBuilder应该总是可附加的。
以下代码运行良好,没有例外。唯一的变化是添加_为foreach参数函数的占位符:
val res = new scala.collection.mutable.StringBuilder()
"hello".foreach { c =>
if (true) {
(0 until 10).foreach( _ => res += c )
}
}
Run Code Online (Sandbox Code Playgroud) 我试图找到一种使用字符在 Java 中打印火车的好方法。
++ +------
|| |+-+ |
/---------|| | |
+ ======== +-+ |
_|--/~\------/~\-+
//// \_/ \_/
Run Code Online (Sandbox Code Playgroud)
到目前为止我的解决方法:
例如
String[] array = new String[10];
array[0] = "...";
array[1] = "...";
...
Run Code Online (Sandbox Code Playgroud)
另一个想法是使用StringBuilder.
有没有比使用更好的方法StringBuilder?
stringbuilder ×10
java ×6
c# ×3
string ×3
.net ×1
arrays ×1
biginteger ×1
clone ×1
cloneable ×1
collections ×1
ellipsis ×1
exception ×1
intellij-14 ×1
java-8 ×1
java-stream ×1
memory ×1
powershell ×1
scala ×1
stringbuffer ×1
xml ×1