最近我发现自己使用StringBuilder进行所有字符串连接,无论大小,但是在最近的性能测试中,我换掉了同事的stringOut = string1 +"." String2样式连接(在一个10000x +循环中使用,每次都是StringBuilder)用于StringBuilder只是为了看看它在次要连接中会有什么不同.
我发现,在性能测试的许多次运行中,无论是串联还是StringBuilder,更改都无论是更高还是更低(重申这是针对小型连接).
在什么时候,StringBuilder对象的"newing up"否定了使用它的好处?
什么是性能优先级以及优先选择以下各项的条件:
String.Format("{0}, {1}", city, state);
Run Code Online (Sandbox Code Playgroud)
要么
city + ", " + state;
Run Code Online (Sandbox Code Playgroud)
要么
StringBuilder sb = new StringBuilder();
sb.Append(city);
sb.Append(", ");
sb.Append(state);
sb.ToString();
Run Code Online (Sandbox Code Playgroud) .net performance stringbuilder string.format string-concatenation
有以下Java代码,StringBuilder使用"\n" 创建,即回车分隔符:
while (scanner.hasNextLine()){
sb.append(scanner.nextLine()).append("\n");
}
Run Code Online (Sandbox Code Playgroud)
它发生了,在最后一个String(行)后面有"\n"符号.
如何从结果StringBuilder对象中优雅地删除最后一个"\n" ?
谢谢.
我想在我的代码中专门检查null或empty.StringBuilder在Java中,empty和null是否相同?
例如:
StringBuilder state = new StringBuilder();
StringBuilder err= new StringBuilder();
success = executeCommand(cmd, state, err);
/* here executeCommand() returns empty or null in state, I cant make changes in <br/> executeCommand() so can I check it in my code somehow for state, if its null or empty? */<br/>
if (state == null) { //do blabla1 }
if (state.tostring().equals("")) { //do blabla2 }
Run Code Online (Sandbox Code Playgroud)
以上代码是否有意义或我应该如何更改?
假设我们的应用程序只有一个线程.我们正在使用StringBuffer那么问题是什么?
我的意思是如果StringBuffer可以通过同步处理多个线程,使用单线程有什么问题?
为什么要用StringBuilder呢?
java stringbuilder multithreading synchronization stringbuffer
为什么StringJava中没有反向方法?相反,该reverse()方法是在StringBuilder?是否有一个原因?但字符串有split(),regionMatches()等等,这是不是更复杂的reverse()方法.
当他们添加这些方法时,为什么不添加reverse()?
我查看了Java API和一些常见的第三方库,但我找不到一个合适的方法来完成String.replaceAll所做的工作,但StringBuilder除外.
我知道有一点工作,可以为StringBuffer完成,但我不想走这条路,因为StringBuffer比较慢.
有没有人知道任何第三方实用程序,或者是否有快速代码来实现此功能?
假设我们有一些代码如下:
public static void main(String[] args) {
String s = "";
for(int i=0 ; i<10000 ; i++) {
s += "really ";
}
s += "long string.";
}
Run Code Online (Sandbox Code Playgroud)
(是的,我知道更好的实现会使用a StringBuilder,但请耐心等待.)
平凡地说,我们可能期望生成的字节码类似于以下内容:
public static void main(java.lang.String[]);
Code:
0: ldc #2 // String
2: astore_1
3: iconst_0
4: istore_2
5: iload_2
6: sipush 10000
9: if_icmpge 25
12: aload_1
13: ldc #3 // String really
15: invokevirtual #4 // Method java/lang/String.concat:(Ljava/lang/String;)Ljava/lang/String;
18: astore_1
19: iinc 2, 1
22: goto 5
25: …Run Code Online (Sandbox Code Playgroud) 我正在做一个java代码检查.这是一个函数(片段):
String getValue() {
String res;
StringBuilder strBuilder = new StringBuilder();
// More code here that sets strBuilder
return res = strBuilder.toString();
}
Run Code Online (Sandbox Code Playgroud)
首先是警告不使用res的值.其次我不明白回报.他们为什么不这么做return( strBuilder.toString() ).有某种优势吗?
由于某种原因,我的for循环不会在我的CapitalizeFirstSentence方法中终止.我在那一行设置一个断点,条件(i!= -1)未完成,所以循环应该终止,但它不会!
当我使用(i> 0)条件时它起作用.
我不确定这里发生了什么.
import javax.swing.JOptionPane;
public class SentenceCapitalizer {
//Main Method
public static void main(String[] args) {
String input; //creates a String to hold keyboard input
//Prompt the user to enter a String using JOptionPane and set it equal to input
input = JOptionPane.showInputDialog("Enter a string. ");
//Display the new String with the first letter of each sentenced capitalized
JOptionPane.showMessageDialog(null, CapitalizeFirstSentence(input));
//Exit the program
System.exit(0);
}
//Capitalize first letter of each sentence
public static String CapitalizeFirstSentence(String in)
{ …Run Code Online (Sandbox Code Playgroud) stringbuilder ×10
java ×8
string ×5
.net ×2
for-loop ×1
javac ×1
loops ×1
newline ×1
optimization ×1
performance ×1
regex ×1
stringbuffer ×1
while-loop ×1