我想知道,因为编译器内部使用StringBuilder在执行字符串连接时附加2个字符串,那么问题是什么?如果字符串连接已经为你完成了工作,我为什么要使用StringBuilder呢?还有其他具体原因吗?
我正在阅读" 更好,更快,更轻的Java "(由Bruce Tate和Justin Gehtland撰写)并且熟悉敏捷类型团队的可读性要求,例如Robert Martin在其清晰的编码书中所讨论的内容.在我现在的团队中,我被告知明确不使用+运算符,因为它在运行时创建了额外的(和不必要的)字符串对象.
但是这篇文章,写于04年,讨论了对象分配是关于10个机器指令的.(基本上免费)
它还讨论了GC如何帮助降低此环境中的成本.
什么是使用之间的实际性能的权衡+,StringBuilder还是StringBuffer?(就我而言,它StringBuffer仅限于Java 1.4.2.)
StringBuffer对我来说导致丑陋,不太可读的代码,正如Tate的书中的几个例子所示.而且StringBuffer是线程同步的,这似乎有它自己的成本是大于中使用了"危险" +操作.
思想/意见?
如何替换文本文件中找到的文本行?
我有一个字符串,如:
Do the dishes0
Run Code Online (Sandbox Code Playgroud)
我想用以下内容更新它:
Do the dishes1
Run Code Online (Sandbox Code Playgroud)
(反之亦然)
我该如何做到这一点?
ActionListener al = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JCheckBox checkbox = (JCheckBox) e.getSource();
if (checkbox.isSelected()) {
System.out.println("Selected");
String s = checkbox.getText();
replaceSelected(s, "1");
} else {
System.out.println("Deselected");
String s = checkbox.getText();
replaceSelected(s, "0");
}
}
};
public static void replaceSelected(String replaceWith, String type) {
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我想只替换读取的行.不是整个文件.
使用字符串生成器而不是纯字符串连接有什么好处和权衡?
new StringBuilder(32).append(str1)
.append(" test: ")
.append(val)
.append(" is changed")
.toString();
Run Code Online (Sandbox Code Playgroud)
vs说
str1 + " test: " + val + " is changed".
Run Code Online (Sandbox Code Playgroud)
str1是一个随机的10个字符串.
str2是一个随机的8个字符串.
我知道Javac编译器能够+使用StringBuilder/ 来转换字符串连接StringBuffer,并且我很想知道从哪个版本引入了这个更改?
我正在使用此示例代码:
public class Main {
public static void main(String[] args) {
String a = args[0];
String s = "a";
s = s + a;
s = s + "b";
s = s + "c";
s = s + "d";
s = s + "e";
System.out.println(s);
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经试过javac 1.8.0_121,javac 1.6.0_20,javac 1.5.0_22和java 1.4.2_19.
这里是字节码我看到使用的样本javap -c来自1.4.2_19:
6: astore_2
7: new …Run Code Online (Sandbox Code Playgroud) 据我所知,当我做String baz = "foo" + "bar" + "123"Java编译器时,内部用一个替换表达式StringBuilder.然而,我们的Java老师告诉我们,总是StringBuilder明确使用明确的...
我是否正确假设我只需要在连接内部循环时显式使用StringBuilder,如Stack Overflow问题字符串生成器与字符串连接的答案中所示?是否有其他情况下,你应该明确地使用StringBuilder,而不是+或+=?
有没有什么办法可以使用正则表达式将字符串格式化为特定模式,或者是stringbuilder + substring更快的方法?
例如,输入电话号码 - > 1234567890
输出为 - >(123)456-7890
我看到这篇文章是可能的:http://www.4guysfromrolla.com/webtech/031302-1.shtml但是给出的解释是在ASP中.我怎么用Java做的???
我想在运算符之后使用换行符进行字符串换行,然后在Eclipse for Java中使用其他项(数字,自定义对象,...)之前的换行符.
当添加具有不同符号的数字时,操作员对我来说比数字更重要.让前面的操作员更好地阅读语句会很好:
一个.
int foo = baaa
+ veryveryveryloooooongexpression
- shortexpression
+ anotherexpression;
Run Code Online (Sandbox Code Playgroud)
与
B.
int foo = baaa +
veryveryveryloooooongexpression -
shortexpression +
anotherexpression;
Run Code Online (Sandbox Code Playgroud)
另一方面,在添加字符串时,操作符只是用于继续行,而String项对我来说更重要.一行末尾的操作符给出了一个暗示,即下一行中会发生一些事情.因此我想在字符串运算符之后使用换行:
B.
String message = "Would you like to use line wrapping at " + position +
" ? If you want to keep that behavior press Enter."
Run Code Online (Sandbox Code Playgroud)
与
一个.
String message = "Would you like to use line wrapping at " + position
+" ? If you want to keep that behavior …Run Code Online (Sandbox Code Playgroud) 我读到了Java使用+=运算符的方式StringBuilder.
操作是否相同("a" + "b")?
我写了一个程序,可以对单词进行排序并确定任何字谜.我想生成一个随机字符串数组,以便我可以测试我的方法的运行时.
public static String[] generateRandomWords(int numberOfWords){
String[] randomStrings = new String[numberOfWords];
Random random = Random();
return null;
}
Run Code Online (Sandbox Code Playgroud)
(方法存根)
我只想要长度为1-10的小写单词.我读了一些关于生成随机数,然后转换为char或其他东西的东西,但我并不完全理解.如果有人可以告诉我如何生成随机单词,那么我应该能够轻松地使用for循环将单词插入到数组中.谢谢!